json( 'POST', 'api/post', [ 'type' => ['h-entry'], 'properties' => [ 'published' => [Carbon::now()->toDateTimeString()], 'syndication' => ['https://www.swarmapp.com/checkin/abc'], 'content' => [[ 'value' => 'My first #checkin using Example Product', 'html' => 'My first #checkin using Example Product', ]], ], 'checkin' => [ 'type' => ['h-card'], 'properties' => [ 'name' => ['Awesome Venue'], 'url' => ['https://foursquare.com/v/123456'], 'latitude' => ['1.23'], 'longitude' => ['4.56'], ], ], ], ['HTTP_Authorization' => 'Bearer ' . $this->getToken()] ); $response ->assertStatus(201) ->assertJson(['response' => 'created']); $this->assertDatabaseHas('notes', [ 'swarm_url' => 'https://www.swarmapp.com/checkin/abc', ]); $this->assertDatabaseHas('places', [ 'external_urls' => '{"foursquare": "https://foursquare.com/v/123456"}', ]); Queue::assertPushed(SendWebMentions::class); } /** * This request would actually come from another client than OwnYourSwarm, but we’re testing * OpenStreetMap data. */ #[Test] public function mockedOwnyourswarmRequestWithOsm(): void { Queue::fake(); $response = $this->json( 'POST', 'api/post', [ 'type' => ['h-entry'], 'properties' => [ 'published' => [Carbon::now()->toDateTimeString()], 'content' => [[ 'value' => 'My first #checkin using Example Product', 'html' => 'My first #checkin using Example Product', ]], ], 'checkin' => [ 'type' => ['h-card'], 'properties' => [ 'name' => ['Awesome Venue'], 'url' => ['https://www.openstreetmap.org/way/123456'], 'latitude' => ['1.23'], 'longitude' => ['4.56'], ], ], ], ['HTTP_Authorization' => 'Bearer ' . $this->getToken()] ); $response ->assertStatus(201) ->assertJson(['response' => 'created']); $this->assertDatabaseHas('places', [ 'external_urls' => '{"osm": "https://www.openstreetmap.org/way/123456"}', ]); Queue::assertPushed(SendWebMentions::class); } /** * This request would actually come from another client than OwnYourSwarm, as that would include a Foursquare URL */ #[Test] public function mockedOwnyourswarmRequestWithoutKnownExternalUrl(): void { Queue::fake(); $response = $this->json( 'POST', 'api/post', [ 'type' => ['h-entry'], 'properties' => [ 'published' => [Carbon::now()->toDateTimeString()], 'content' => [[ 'value' => 'My first #checkin using Example Product', 'html' => 'My first #checkin using Example Product', ]], ], 'checkin' => [ 'type' => ['h-card'], 'properties' => [ 'name' => ['Awesome Venue'], 'url' => ['https://www.example.org/way/123456'], 'latitude' => ['1.23'], 'longitude' => ['4.56'], ], ], ], ['HTTP_Authorization' => 'Bearer ' . $this->getToken()] ); $response ->assertStatus(201) ->assertJson(['response' => 'created']); $this->assertDatabaseHas('places', [ 'external_urls' => '{"default": "https://www.example.org/way/123456"}', ]); Queue::assertPushed(SendWebMentions::class); } #[Test] public function mockedOwnyourswarmRequestWithNoTextContent(): void { $response = $this->json( 'POST', 'api/post', [ 'type' => ['h-entry'], 'properties' => [ 'published' => [Carbon::now()->toDateTimeString()], 'syndication' => ['https://www.swarmapp.com/checkin/def'], ], 'checkin' => [ 'type' => ['h-card'], 'properties' => [ 'name' => ['Awesomer Venue'], 'url' => ['https://foursquare.com/v/654321'], 'latitude' => ['3.21'], 'longitude' => ['6.54'], ], ], ], ['HTTP_Authorization' => 'Bearer ' . $this->getToken()] ); $response ->assertStatus(201) ->assertJson(['response' => 'created']); $this->assertDatabaseHas('places', [ 'external_urls' => '{"foursquare": "https://foursquare.com/v/654321"}', ]); $this->assertDatabaseHas('notes', [ 'swarm_url' => 'https://www.swarmapp.com/checkin/def', ]); // Check the default text content for the note was saved $this->get($response->__get('headers')->get('location'))->assertSee('📍'); } #[Test] public function mockedOwnyourswarmRequestSavesJustThePostWhenAnErrorOccursInTheCheckinData(): void { Queue::fake(); $response = $this->json( 'POST', 'api/post', [ 'type' => ['h-entry'], 'properties' => [ 'published' => [Carbon::now()->toDateTimeString()], 'syndication' => ['https://www.swarmapp.com/checkin/abc'], 'content' => [[ 'value' => 'My first #checkin using Example Product', 'html' => 'My first #checkin using Example Product', ]], ], 'checkin' => [ 'type' => ['h-card'], 'properties' => [ 'name' => ['Awesome Venue'], 'url' => ['https://foursquare.com/v/123456'], ], ], ], ['HTTP_Authorization' => 'Bearer ' . $this->getToken()] ); $response ->assertStatus(201) ->assertJson(['response' => 'created']); $this->assertDatabaseMissing('places', [ 'name' => 'Awesome Venue', ]); Queue::assertPushed(SendWebMentions::class); } #[Test] public function mockedOwnyourswarmRequestWithHAdrLocation(): void { Queue::fake(); $response = $this->json( 'POST', 'api/post', [ 'type' => ['h-entry'], 'properties' => [ 'published' => [Carbon::now()->toDateTimeString()], 'syndication' => ['https://www.swarmapp.com/checkin/abc'], 'content' => [[ 'value' => 'My first #checkin using Example Product', 'html' => 'My first #checkin using Example Product', ]], ], 'location' => [ 'type' => ['h-adr'], 'properties' => [ 'latitude' => ['1.23'], 'longitude' => ['4.56'], 'street-address' => ['Awesome Street'], ], ], 'checkin' => [ 'type' => ['h-card'], 'properties' => [ 'name' => ['Awesome Venue'], 'url' => ['https://foursquare.com/v/123456'], ], ], ], ['HTTP_Authorization' => 'Bearer ' . $this->getToken()] ); $response ->assertStatus(201) ->assertJson(['response' => 'created']); $this->assertDatabaseMissing('places', [ 'name' => 'Awesome Venue', ]); Queue::assertPushed(SendWebMentions::class); } #[Test] public function ownyourswarmCheckinTestUsingRealData(): void { $response = $this->json( 'POST', 'api/post', [ 'type' => ['h-entry'], 'properties' => [ 'published' => [Carbon::now()->toDateTimeString()], ], 'syndication' => [ 'https://www.swarmapp.com/user/199841/checkin/5c4b1ac56dcf04002c0a4f58', ], 'checkin' => [ 'type' => ['h-card'], 'properties' => [ 'name' => ['Forbidden Planet'], 'url' => ['https://foursquare.com/v/4ade0e46f964a520bf6f21e3'], 'latitude' => [53.483153021713], 'longitude' => [-2.2350297792539], 'street-address' => ['65 Oldham St.'], 'locality' => ['Manchester'], 'country-name' => ['United Kingdom'], 'postal-code' => ['M1 1JR'], ], 'value' => 'https://foursquare.com/v/4ade0e46f964a520bf6f21e3', ], 'location' => [ 'type' => ['h-adr'], 'properties' => [ 'latitude' => [53.483153021713], 'longitude' => [-2.2350297792539], 'street-address' => ['65 Oldham St.'], 'locality' => ['Manchester'], 'country-name' => ['United Kingdom'], 'postal-code' => ['M1 1JR'], ], ], ], ['HTTP_Authorization' => 'Bearer ' . $this->getToken()] ); $this->assertDatabaseHas('places', [ 'name' => 'Forbidden Planet', ]); $response ->assertStatus(201) ->assertJson(['response' => 'created']); } }