public function testPostRound() { $user1 = factory(App\Models\User::class)->create(); $user2 = factory(App\Models\User::class)->create(); // create two open battles $battle1 = new OpenBattle(); $battle1->rapper1_id = $user1->id; $battle1->rapper2_id = $user2->id; $battle1->phase = 1; $battle1->beat1_id = 1; $battle1->rapper1_round1 = "/path/to/rapper1_round1"; $battle1->rapper2_round2 = "/path/to/rapper2_round2"; $battle1->beat2_id = 2; $battle1->rapper2_round1 = "/path/to/rapper2_round1"; $battle1->rapper1_round2 = "/path/to/rapper1_round2"; $battle1->save(); $this->post('/open-battle/' . $battle1->id . '/round', ['beat_id' => 2, 'video' => "abc.mp4"]); // TODO: check if OpenBattle changed, video expects an actual video file, not sure if there is a way to fake one $this->markTestIncomplete(); }
/** * Insertion test * * @return void */ public function testInsert() { // create users $user1 = factory(App\Models\User::class)->create(); $user2 = factory(App\Models\User::class)->create(); // create OpenBattle $openBattle = new OpenBattle(); $openBattle->rapper1_id = $user1->id; $openBattle->rapper2_id = $user2->id; $openBattle->phase = 2; $openBattle->beat1_id = 1; $openBattle->beat2_id = 2; $openBattle->rapper1_round1 = '/somewhere/somefile'; $openBattle->rapper2_round1 = '/somewhere/otherfile'; $openBattle->rapper1_round2 = '/somewhere/file3'; $openBattle->rapper2_round2 = '/somewhere/file4'; $openBattle->save(); // check if it is in database $this->seeInDatabase('open_battles', ['rapper1_id' => $user1->id, 'rapper2_id' => $user2->id, 'beat1_id' => 1, 'beat2_id' => 2, 'rapper1_round1' => '/somewhere/somefile', 'rapper2_round1' => '/somewhere/otherfile', 'rapper1_round2' => '/somewhere/file3', 'rapper2_round2' => '/somewhere/file4']); // can rappers be retrieved from OpenBattle? $this->assertNotNull($openBattle->rapper1()->get()->values()->keyBy('id')->get($user1->id)); $this->assertNotNull($openBattle->rapper2()->get()->values()->keyBy('id')->get($user2->id)); }
/** * Test for getOpen */ public function testGetOpen() { $user1 = factory(App\Models\User::class)->create(); $user2 = factory(App\Models\User::class)->create(); // create two open battles $battle1 = new OpenBattle(); $battle1->rapper1_id = $user1->id; $battle1->rapper2_id = $user2->id; $battle1->phase = 1; $battle1->beat1_id = 1; $battle1->rapper1_round1 = "/path/to/rapper1_round1"; $battle1->rapper2_round2 = "/path/to/rapper2_round2"; $battle1->beat2_id = 2; $battle1->rapper2_round1 = "/path/to/rapper2_round1"; $battle1->rapper1_round2 = "/path/to/rapper1_round2"; $battle1->save(); $battle2 = new OpenBattle(); $battle2->rapper1_id = $user1->id; $battle2->rapper2_id = $user2->id; $battle2->phase = 2; $battle2->beat1_id = 2; $battle2->rapper1_round1 = "/path/to/rapper1_round1_b"; $battle2->rapper2_round2 = "/path/to/rapper2_round2_b"; $battle2->beat2_id = 1; $battle2->rapper2_round1 = "/path/to/rapper2_round1_b"; $battle2->rapper1_round2 = "/path/to/rapper1_round2_b"; $battle2->save(); $this->actingAs($user1)->get('/battles/open')->seeJson(['current_page' => 1, 'data' => [['battle_id' => (string) $battle1->id, 'rapper1' => ['user_id' => (string) $user1->id, 'username' => $user1->username, 'profile_picture' => $user1->picture], 'rapper2' => ['user_id' => (string) $user2->id, 'username' => $user2->username, 'profile_picture' => $user2->picture]], ['battle_id' => (string) $battle2->id, 'rapper1' => ['user_id' => (string) $user1->id, 'username' => $user1->username, 'profile_picture' => $user1->picture], 'rapper2' => ['user_id' => (string) $user2->id, 'username' => $user2->username, 'profile_picture' => $user2->picture]]]]); }
/** * Test for openBattles() * * @return void */ public function testOpenBattles() { $user1 = factory(App\Models\User::class)->create(); $user2 = factory(App\Models\User::class)->create(); $user3 = factory(App\Models\User::class)->create(); $user4 = factory(App\Models\User::class)->create(); $battle1 = new OpenBattle(); $battle1->rapper1_id = $user1->id; $battle1->rapper2_id = $user2->id; $battle1->save(); $battle2 = new OpenBattle(); $battle2->rapper1_id = $user2->id; $battle2->rapper2_id = $user3->id; $battle2->save(); $battle3 = new OpenBattle(); $battle3->rapper1_id = $user3->id; $battle3->rapper2_id = $user1->id; $battle3->save(); // get open battles of user2 $battles = $user2->openBattles()->lists('id')->toArray(); $this->assertCount(2, $battles); $this->assertContains($battle1->id, $battles); $this->assertContains($battle2->id, $battles); $this->assertNotContains($battle3->id, $battles); // tests for hasOpenBattleAgainst() $this->assertTrue($user1->hasOpenBattleAgainst($user2)); $this->assertTrue($user1->hasOpenBattleAgainst($user3)); $this->assertTrue($user2->hasOpenBattleAgainst($user1)); $this->assertTrue($user2->hasOpenBattleAgainst($user3)); $this->assertFalse($user1->hasOpenBattleAgainst($user4)); $this->assertFalse($user4->hasOpenBattleAgainst($user3)); // tests for scopeNoBattleRequestsAgainst() $noba1 = $user1->noOpenBattleAgainst($user4)->lists('id')->toArray(); $this->assertContains($user4->id, $noba1); $noba4 = $user4->noOpenBattleAgainst($user4)->lists('id')->toArray(); $this->assertContains($user1->id, $noba4); $this->assertContains($user2->id, $noba4); $this->assertContains($user3->id, $noba4); }
/** * Accept or decline a battle request. * * @param \Illuminate\Http\Request $request * @param integer $id * @return void|\Illuminate\Http\Response */ public function postAnswer(Request $request, $id) { $this->validate($request, ['accepted' => 'required|boolean']); $user = Auth::user(); if (is_null($user)) { return response('Unauthorized', 401); } $battleRequest = BattleRequest::findOrFail($id); // Check if authenticated user is challenged user if ($battleRequest->challenged_id == $user->id) { if ($request->input('accepted')) { $battle = new OpenBattle(); $battle->start($battleRequest->challenger, $battleRequest->challenged); $battle->save(); } $battleRequest->delete(); } else { return response('Unauthorized', 401); } }
/** * Run the database seeds. * * @return void */ public function run() { Model::unguard(); // config $usercnt = 20; $userRappercnt = 20; $battlecnt = 20; $battleRequestcnt = rand($userRappercnt / 4, $userRappercnt / 2); // max $userRappercnt / 2 $openBattlecnt = rand($userRappercnt / 4, $userRappercnt / 2); // max $userRappercnt / 2 // create users $users = factory(App\Models\User::class, $usercnt)->create(); // rapper and non-rapper $usersRapper = factory(App\Models\User::class, 'rapper', $userRappercnt)->create(); // rapper only //---------------------------------------------- // create battles for ($i = 0; $i < $battlecnt; $i++) { $battle = new Battle(); // get first rapper $battle->rapper1_id = $usersRapper->random()->id; // get second rapper != first rapper do { $battle->rapper2_id = $usersRapper->random()->id; } while ($battle->rapper1_id == $battle->rapper2_id); $battle->save(); //----------------------------------------- // create votes // create list of all created users $usersAll = $users->keyBy('id')->merge($usersRapper->keyBy('id')); $usersAll->shuffle(); $userVotescnt = rand(0, $usersAll->count()); for ($j = 0; $j < $userVotescnt; $j++) { $vote = new Vote(); $vote->user_id = $usersAll->get($j)->id; $vote->battle_id = $battle->id; $vote->rapper_number = rand(0, 1); $vote->save(); // update vote counter if ($vote->rapper_number == 0) { $battle->votes_rapper1++; } else { $battle->votes_rapper2++; } } // save vote count in battle $battle->save(); $battle->rapper1->updateRating(); $battle->rapper2->updateRating(); } //---------------------------------------------- // create battle_requests for ($i = 0; $i < $battleRequestcnt * 2; $i += 2) { $battleRequest = new BattleRequest(); $battleRequest->challenger_id = $usersRapper->get($i)->id; $battleRequest->challenged_id = $usersRapper->get($i + 1)->id; $battleRequest->save(); } //---------------------------------------------- // create open battles $usersRapper->shuffle(); for ($i = 0; $i < $openBattlecnt * 2; $i += 2) { $openBattle = new OpenBattle(); $openBattle->rapper1_id = $usersRapper->get($i)->id; $openBattle->rapper2_id = $usersRapper->get($i + 1)->id; $openBattle->phase = rand(1, 2); // TODO: how many phases? $openBattle->beat1_id = rand(0, 2); $openBattle->beat2_id = rand(0, 2); $openBattle->save(); } Model::reguard(); }