new Response(200, [], file_get_contents(__DIR__.'../../blobs/lastfm/session-key.xml')), ]); $api = new Lastfm(null, null, $client); $this->assertEquals('foo', $api->getSessionKey('bar')); } /** @test */ public function session_key_can_be_set() { $user = factory(User::class)->create(); $this->postAsUser('api/lastfm/session-key', ['key' => 'foo'], $user); $user = User::find($user->id); $this->assertEquals('foo', $user->lastfm_session_key); } /** @test */ public function user_can_connect_to_lastfm() { $redirector = m::mock(Redirector::class); $redirector->shouldReceive('to')->once(); $guard = m::mock(Guard::class, ['user' => factory(User::class)->create()]); $auth = m::mock(JWTAuth::class, [ 'parseToken' => '', 'getToken' => '', ]); (new LastfmController($guard))->connect($redirector, new Lastfm(), $auth); } /** @test */ public function lastfm_session_key_can_be_retrieved_and_stored() { $request = m::mock(Request::class); $request->token = 'foo'; $lastfm = m::mock(Lastfm::class, ['getSessionKey' => 'bar']); $user = factory(User::class)->create(); $guard = m::mock(Guard::class, ['user' => $user]); (new LastfmController($guard))->callback($request, $lastfm); $this->assertEquals('bar', $user->lastfm_session_key); } /** @test */ public function user_can_disconnect_from_lastfm() { $user = factory(User::class)->create(['preferences' => ['lastfm_session_key' => 'bar']]); $this->deleteAsUser('api/lastfm/disconnect', [], $user); $user = User::find($user->id); $this->assertNull($user->lastfm_session_key); } /** @test */ public function user_can_love_a_track_on_lastfm() { $this->withoutEvents(); $this->createSampleMediaSet(); $user = factory(User::class)->create(['preferences' => ['lastfm_session_key' => 'bar']]); $interaction = Interaction::create([ 'user_id' => $user->id, 'song_id' => Song::first()->id, ]); $lastfm = m::mock(Lastfm::class, ['enabled' => true]); $lastfm->shouldReceive('toggleLoveTrack') ->with($interaction->song->title, $interaction->song->album->artist->name, 'bar', false); (new LoveTrackOnLastfm($lastfm))->handle(new SongLikeToggled($interaction, $user)); } /** @test */ public function user_now_playing_status_can_be_updated_to_lastfm() { $this->withoutEvents(); $this->createSampleMediaSet(); $user = factory(User::class)->create(['preferences' => ['lastfm_session_key' => 'bar']]); $song = Song::first(); $lastfm = m::mock(Lastfm::class, ['enabled' => true]); $lastfm->shouldReceive('updateNowPlaying') ->with($song->album->artist->name, $song->title, $song->album->name, $song->length, 'bar'); (new UpdateLastfmNowPlaying($lastfm))->handle(new SongStartedPlaying($song, $user)); } }