Having a #beer at the local. 🍺
' . PHP_EOL;
$note = Note::factory([
'note' => 'Having a #beer at the local. 🍺',
])->create();
$this->assertEquals($expected, $note->note);
}
/**
* Look for a default image in the contact’s h-card for the makeHCards method.
*
* @test
*/
public function defaultImageUsedAsFallbackInMakehcardsMethod(): void
{
// phpcs:ignore
$expected = 'Hi
Tantek Çelik
t
' . PHP_EOL;
Contact::factory()->create([
'nick' => 'tantek',
'name' => 'Tantek Çelik',
'homepage' => 'http://tantek.com',
'twitter' => 't',
'facebook' => null,
]);
$note = Note::factory()->create([
'note' => 'Hi @tantek',
]);
$this->assertEquals($expected, $note->note);
}
/**
* Look for a specific profile image in the contact’s h-card.
*
* @test
*/
public function specificProfileImageUsedInMakehcardsMethod(): void
{
Contact::factory()->create([
'nick' => 'aaron',
'name' => 'Aaron Parecki',
'homepage' => 'https://aaronparecki.com',
'twitter' => null,
'facebook' => 123456,
]);
$fileSystem = new Filesystem();
$fileSystem->ensureDirectoryExists(public_path('/assets/profile-images/aaronparecki.com'));
if (! $fileSystem->exists(public_path('/assets/profile-images/aaronparecki.com/image'))) {
$fileSystem->copy('./tests/aaron.png', public_path('/assets/profile-images/aaronparecki.com/image'));
}
$note = Note::factory()->create([
'note' => 'Hi @aaron',
]);
// phpcs:ignore
$expected = 'Hi
Aaron Parecki
Facebook
' . PHP_EOL;
$this->assertEquals($expected, $note->note);
}
/**
* Look for twitter URL when there’s no associated contact.
*
* @test
*/
public function twitterLinkIsCreatedWhenNoContactFound(): void
{
$expected = 'Hi @bob
' . PHP_EOL;
$note = Note::factory()->create([
'note' => 'Hi @bob',
]);
$this->assertEquals($expected, $note->note);
}
/** @test */
public function shorturlMethodReturnsExpectedValue(): void
{
$note = Note::factory()->make();
$note->id = 14;
$this->assertEquals(config('url.shorturl') . '/notes/E', $note->shorturl);
}
/** @test */
public function weGetLatitudeLongitudeValuesOfAssociatedPlaceOfNote(): void
{
$place = Place::factory()->create([
'latitude' => '53.4983',
'longitude' => '-2.3805',
]);
$note = Note::factory()->create([
'place_id' => $place->id,
]);
$this->assertEquals('53.4983', $note->latitude);
$this->assertEquals('-2.3805', $note->longitude);
}
/** @test */
public function whenNoAssociatedPlaceWeGetNullForLatitudeLongitudeValues(): void
{
$note = Note::factory()->create();
$this->assertNull($note->latitude);
$this->assertNull($note->longitude);
}
/** @test */
public function weCanGetAddressAttributeForAssociatedPlace(): void
{
$place = Place::factory()->create([
'name' => 'The Bridgewater Pub',
'latitude' => '53.4983',
'longitude' => '-2.3805',
]);
$note = Note::factory()->create([
'place_id' => $place->id,
]);
$this->assertEquals('The Bridgewater Pub', $note->address);
}
/** @test */
public function deletingNotesAlsoDeletesTagsViaTheEventObserver(): void
{
// first we’ll create a temporary note to delete
$note = Note::create(['note' => 'temporary #temp']);
$this->assertDatabaseHas('tags', [
'tag' => 'temp',
]);
$tag = Tag::where('tag', 'temp')->first();
$note->forceDelete();
$this->assertDatabaseMissing('note_tag', [
'tag_id' => $tag->id,
]);
}
/** @test */
public function saveBlankNotesAsNull(): void
{
$note = new Note(['note' => '']);
$this->assertNull($note->note);
}
/** @test */
public function reverseGeocodeAnAttraction(): void
{
// phpcs:disable Generic.Files.LineLength.TooLong
$json = << 'application/json'], $json),
]);
$handler = HandlerStack::create($mock);
$client = new Client(['handler' => $handler]);
$this->app->instance(Client::class, $client);
$note = new Note();
$address = $note->reverseGeoCode(51.50084, -0.14264);
$this->assertEquals(
'Victoria, London , UK ',
$address
);
}
/** @test */
public function reverseGeocodeASuburb(): void
{
// phpcs:disable Generic.Files.LineLength.TooLong
$json = << 'application/json'], $json),
]);
$handler = HandlerStack::create($mock);
$client = new Client(['handler' => $handler]);
$this->app->instance(Client::class, $client);
$note = new Note();
$address = $note->reverseGeoCode(51.02, 0.91);
$this->assertEquals(
'Newchurch, Shepway , UK ',
$address
);
}
/** @test */
public function reverseGeocodeACity(): void
{
// Note I’ve modified this JSON response so it only contains the
// city the Uni is in
// phpcs:disable Generic.Files.LineLength.TooLong
$json = << 'application/json'], $json),
]);
$handler = HandlerStack::create($mock);
$client = new Client(['handler' => $handler]);
$this->app->instance(Client::class, $client);
$note = new Note();
$address = $note->reverseGeoCode(53.466277988406, -2.2304474827445);
$this->assertEquals(
'Manchester , UK ',
$address
);
}
/** @test */
public function reverseGeocodeACounty(): void
{
// Note I’ve removed everything below county to test for queries where
// that’s all that is returned
// phpcs:disable Generic.Files.LineLength.TooLong
$json = << 'application/json'], $json),
]);
$handler = HandlerStack::create($mock);
$client = new Client(['handler' => $handler]);
$this->app->instance(Client::class, $client);
$note = new Note();
$address = $note->reverseGeoCode(51.1, 0.61);
$this->assertEquals('Kent , UK ', $address);
}
/** @test */
public function reverseGeocodeACountry(): void
{
// Note I’ve removed everything below country to test for querires where
// that’s all that is returned
// phpcs:disable Generic.Files.LineLength.TooLong
$json = << 'application/json'], $json),
]);
$handler = HandlerStack::create($mock);
$client = new Client(['handler' => $handler]);
$this->app->instance(Client::class, $client);
$note = new Note();
$address = $note->reverseGeoCode(54.3, 9.4);
$this->assertEquals('Ireland ', $address);
}
/** @test */
public function addImageElementToNoteContentWhenMediaAssociated(): void
{
$media = Media::factory()->create([
'type' => 'image',
'path' => 'test.png',
]);
$note = Note::factory()->create([
'note' => 'A nice image',
]);
$note->media()->save($media);
$expected = 'A nice image
';
$this->assertEquals($expected, $note->content);
}
/** @test */
public function addVideoElementToNoteContentWhenMediaAssociated(): void
{
$media = Media::factory()->create([
'type' => 'video',
'path' => 'test.mkv',
]);
$note = Note::factory()->create([
'note' => 'A nice video',
]);
$note->media()->save($media);
$expected = 'A nice video
';
$this->assertEquals($expected, $note->content);
}
/** @test */
public function addAudioElementToNoteContentWhenMediaAssociated(): void
{
$media = Media::factory()->create([
'type' => 'audio',
'path' => 'test.flac',
]);
$note = Note::factory()->create([
'note' => 'Some nice audio',
]);
$note->media()->save($media);
$expected = 'Some nice audio
';
$this->assertEquals($expected, $note->content);
}
/**
* @test
*
* @todo Why do we need to provide text?
*/
public function provideTextForBlankContent(): void
{
$note = new Note();
$this->assertEquals('A blank note', $note->content);
}
// @todo Sort out twitter requests
/** @test
public function setTwitterContentToNullWhenOembedErrorOccurs(): void
{
$note = new Note();
$note->in_reply_to = 'https://twitter.com/search';
$this->assertNull($note->twitter);
}*/
/** @test */
public function markdownContentGetsConverted(): void
{
$note = Note::factory()->create([
'note' => 'The best search engine? https://duckduckgo.com',
]);
$this->assertSame(
'The best search engine? https://duckduckgo.com
' . PHP_EOL,
$note->note
);
}
/**
* For now, just reply on a cached object instead of actually querying Twitter.
*
* @test
*/
public function checkInReplyToIsTwitterLink(): void
{
$tempContent = (object) [
'html' => 'something random',
];
Cache::put('933662564587855877', $tempContent);
$note = Note::factory()->create([
'in_reply_to' => 'https://twitter.com/someRando/status/933662564587855877',
]);
$this->assertEquals($tempContent, $note->twitter);
}
/** @test */
public function latitudeAndLongitudeCanBeParsedFromPlainLocation(): void
{
$note = Note::factory()->create([
'location' => '1.23,4.56',
]);
$this->assertSame(1.23, $note->latitude);
$this->assertSame(4.56, $note->longitude);
}
/** @test */
public function addressAttributeCanBeRetrievedFromPlainLocation(): void
{
Cache::put('1.23,4.56', 'Antarctica ');
$note = Note::factory()->create([
'location' => '1.23,4.56',
]);
$this->assertSame('Antarctica ', $note->address);
}
/** @test */
public function mastodonUsernamesAreParsedCorrectly(): void
{
$expected = 'Hi @freekmurze@phpc.social how are you?
' . PHP_EOL;
$note = Note::factory()->create([
'note' => 'Hi @freekmurze@phpc.social how are you?',
]);
$this->assertSame($expected, $note->note);
}
}