/**
  * Handle the event.
  *
  * @param  OpenBattleCompleted  $event
  * @return void
  */
 public function handle(OpenBattleCompleted $event)
 {
     $openBattle = $event->openBattle;
     // create new Battle
     $battle = new Battle();
     $battle->rapper1_id = $openBattle->rapper1_id;
     $battle->rapper2_id = $openBattle->rapper2_id;
     $battle->video = $event->outfilename;
     $battle->save();
     // delete OpenBattle
     $openBattle->delete();
 }
 /**
  * Test for getVideo
  */
 public function testGetVideo()
 {
     //$this->withoutMiddleware();
     $user1 = factory(App\Models\User::class)->create(['rating' => 3]);
     $user2 = factory(App\Models\User::class)->create(['rating' => 6]);
     $battle = new Battle();
     $battle->rapper1_id = $user1->id;
     $battle->rapper2_id = $user2->id;
     $battle->video = "/path/to/file";
     $battle->votes_rapper1 = 45;
     $battle->votes_rapper2 = 86;
     $battle->save();
     //echo $battle->id;
     $this->get('/video/{id}', ['id' => $battle->id]);
 }
 /**
  * Tests whether the data can be retrieved from the database
  */
 public function testExtract()
 {
     // create users
     $user1 = factory(App\Models\User::class)->create();
     $user2 = factory(App\Models\User::class)->create();
     $user3 = factory(App\Models\User::class)->create();
     // create battle
     $battle = new Battle();
     $battle->rapper1_id = $user1->id;
     $battle->rapper2_id = $user2->id;
     $battle->save();
     // create some votes
     $vote1 = new Vote();
     $vote1->user_id = $user1->id;
     $vote1->battle_id = $battle->id;
     $vote1->rapper_number = 1;
     $vote1->save();
     $vote2 = new Vote();
     $vote2->user_id = $user2->id;
     $vote2->battle_id = $battle->id;
     $vote2->rapper_number = 0;
     $vote2->save();
     $vote3 = new Vote();
     $vote3->user_id = $user3->id;
     $vote3->battle_id = $battle->id;
     $vote3->rapper_number = 0;
     $vote3->save();
     // can user be retrieved?
     $this->assertEquals($user3->id, $vote3->user->id);
     // can battle be retrieved?
     $this->assertEquals($battle->id, $vote3->battle->id);
     // can a battle get it's votes?
     $battlevotecnt = $battle->votes()->count();
     $this->assertEquals(3, $battlevotecnt);
     $battlevotes = $battle->votes()->get()->values()->keyBy('user_id');
     $this->assertNotNull($battlevotes->get($user1->id));
     $this->assertNotNull($battlevotes->get($user2->id));
     $this->assertNotNull($battlevotes->get($user3->id));
     // can a user get their votes?
     $vote1id = $user1->votes()->get()->values()->keyBy('user_id')->get($user1->id)->id;
     $this->assertEquals($vote1->id, $vote1id);
 }
 /**
  * Test for battles()
  *
  * @return void
  */
 public function testBattles()
 {
     $user1 = factory(App\Models\User::class)->create();
     $user2 = factory(App\Models\User::class)->create();
     $user3 = factory(App\Models\User::class)->create();
     $battle1 = new Battle();
     $battle1->rapper1_id = $user1->id;
     $battle1->rapper2_id = $user2->id;
     $battle1->save();
     $battle2 = new Battle();
     $battle2->rapper1_id = $user2->id;
     $battle2->rapper2_id = $user3->id;
     $battle2->save();
     $battle3 = new Battle();
     $battle3->rapper1_id = $user3->id;
     $battle3->rapper2_id = $user1->id;
     $battle3->save();
     // get battles of user2
     $battles = $user2->battles()->lists('id')->toArray();
     $this->assertCount(2, $battles);
     $this->assertContains($battle1->id, $battles);
     $this->assertContains($battle2->id, $battles);
     $this->assertNotContains($battle3->id, $battles);
 }
 /**
  * Test for scopeOpenVoting and scopeCompleted
  */
 public function testScopesOpenCompleted()
 {
     // create rappers
     $user1 = factory(App\Models\User::class)->create();
     $user2 = factory(App\Models\User::class)->create();
     $votingperiod = config('rap-battle.votingperiod', 24);
     // battles older than this date are closed:
     $timeoldest = new Carbon();
     $timeoldest->subHours($votingperiod + 1);
     // create two battles
     $battle1 = new Battle();
     $battle1->rapper1_id = $user1->id;
     $battle1->rapper2_id = $user2->id;
     $battle1->save();
     $battle2 = new Battle();
     $battle2->rapper1_id = $user1->id;
     $battle2->rapper2_id = $user2->id;
     $battle2->created_at = $timeoldest->toDateTimeString();
     $battle2->save();
     // test scopeOpenVoting
     // get battles from database
     $openBattles = Battle::openVoting()->get()->values()->keyBy('id');
     $this->assertTrue($openBattles->has($battle1->id));
     $this->assertFalse($openBattles->has($battle2->id));
     // test scopeCompleted
     // get battles from database
     $completedBattles = Battle::completed()->get()->values()->keyBy('id');
     $this->assertFalse($completedBattles->has($battle1->id));
     $this->assertTrue($completedBattles->has($battle2->id));
 }
 /**
  * Test for postVote
  */
 public function testPostVote()
 {
     $user1 = factory(App\Models\User::class)->create();
     $user2 = factory(App\Models\User::class)->create();
     // create two battles
     $battle = new Battle();
     $battle->rapper1_id = $user1->id;
     $battle->rapper2_id = $user2->id;
     $battle->votes_rapper1 = 0;
     $battle->votes_rapper2 = 0;
     $battle->save();
     $this->actingAs($user1)->post('/battle/' . $battle->id . '/vote', ['rapper_number' => 1]);
     // TODO: check if vote exists
     $this->assertEquals(1, $battle->votes()->count());
     $this->assertEquals(0, $battle->votes_rapper1);
     $this->assertEquals(1, $battle->votes_rapper2);
 }
 /**
  * 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();
 }