/**
  * @test
  */
 public function quizmasterCanProvideQuizzingPreferences()
 {
     $tournament = Tournament::firstOrFail();
     $tournamentQuizmaster = TournamentQuizmaster::firstOrFail();
     $shirtSize = 'XL';
     $gamesQuizzed = 'Fewer than 15';
     $this->visit('/tournaments/' . $tournament->slug . '/registration/quizmaster-preferences/' . $tournamentQuizmaster->guid)->select($gamesQuizzed, 'games_quizzed_this_season')->select($shirtSize, 'shirt_size')->press('Save')->see('Your quizzing preferences have been updated');
     $tournamentQuizmaster = TournamentQuizmaster::firstOrFail();
     $this->assertEquals($shirtSize, $tournamentQuizmaster->shirt_size);
     $this->assertEquals($gamesQuizzed, $tournamentQuizmaster->quizzing_preferences->gamesQuizzedThisSeason());
 }
 /**
  * @test
  */
 public function canRegisterWithGroupAndWithoutFees()
 {
     $this->setupAsGuardian();
     $this->simulateTransaction();
     $gamesQuizzedThisSeason = 'Fewer than 30';
     $tournament = Tournament::firstOrFail();
     // Remove fees for quizmasters
     $tournament->participantFees()->where('participant_type_id', ParticipantType::QUIZMASTER)->update(['earlybird_fee' => 0, 'fee' => 0]);
     $group = Group::byProgram($tournament->program_id)->first();
     $this->visit('/tournaments/' . $tournament->slug . '/registration/quizmaster')->select($group->id, 'group_id')->select($gamesQuizzedThisSeason, 'games_quizzed_this_season')->press('Submit')->see('Your quizmaster registration is complete');
     $quizmaster = TournamentQuizmaster::orderBy('id', 'desc')->first();
     $this->assertEquals($group->id, $quizmaster->group_id);
     // quizzing preferences saved
     $this->assertEquals($gamesQuizzedThisSeason, $quizmaster->quizzing_preferences->gamesQuizzedThisSeason());
     // no payment was made, so we shouldn't have a receipt
     $this->assertNull($quizmaster->receipt_id);
 }
 public function postPreferences(QuizzingPreferencesRequest $request, $slug, $guid)
 {
     /** @var TournamentQuizmaster $tournamentQuizmaster */
     $tournamentQuizmaster = TournamentQuizmaster::where('guid', $guid)->firstOrFail();
     // model events will pick this up and make sure this user
     // is flagged as a quizmaster in the mailing list
     if ($tournamentQuizmaster->user_id == null && $tournamentQuizmaster->email == Auth::user()->email) {
         $tournamentQuizmaster->user_id = Auth::user()->id;
     }
     /** @var QuizzingPreferences $quizzingPreferences */
     $quizzingPreferences = $tournamentQuizmaster->quizzing_preferences;
     $quizzingPreferences->setQuizzedAtThisTournamentBefore($request->get('quizzed_at_tournament'));
     $quizzingPreferences->setTimesQuizzedAtThisTournament($request->get('times_quizzed_at_tournament'));
     $quizzingPreferences->setGamesQuizzedThisSeason($request->get('games_quizzed_this_season'));
     $quizzingPreferences->setQuizzingInterest($request->get('quizzing_interest'));
     $tournamentQuizmaster->quizzing_preferences = $quizzingPreferences;
     $tournamentQuizmaster->shirt_size = $request->get('shirt_size');
     $tournamentQuizmaster->save();
     return redirect('/tournaments/' . $tournamentQuizmaster->tournament->slug)->withFlashSuccess('Your quizzing preferences have been updated');
 }
 /**
  * @return TournamentQuizmaster
  */
 public function tournamentQuizmaster()
 {
     return TournamentQuizmaster::where('id', $this->eventData()[0])->first();
 }