*/ private array $modelsToBeDeleted; private RegistrationController $subject; public function setUp(): void { parent::setUp(); $this->modelsToBeDeleted = []; $this->application = app(); $this->oauth = $this->getMockBuilder(OAuth2::class) ->disableOriginalConstructor() ->getMock(); $this->application->instance(OAuth2::class, $this->oauth); $this->config = $this->application->get(Config::class); $this->session = $this->application->get(SessionInterface::class); $this->subject = $this->application->make(RegistrationController::class); } public function tearDown(): void { parent::tearDown(); $this->deleteModels(); } /** * Renders the registration page with a minimum fields config. * Asserts that the basic fields are there while the other fields are not there. * * @covers \Engelsystem\Controllers\RegistrationController */ public function testViewMinimumConfig(): void { SignUpConfig::setMinimumConfig($this->config); $response = $this->subject->view(); $this->assertSame(200, $response->getStatusCode()); $responseHTML = $response->getBody()->__toString(); // assert the expected fields are there FormFieldAssert::assertContainsInputField('username', $responseHTML); FormFieldAssert::assertContainsInputField('password', $responseHTML); FormFieldAssert::assertContainsInputField('password_confirmation', $responseHTML); FormFieldAssert::assertContainsInputField('email', $responseHTML); FormFieldAssert::assertContainsInputField('mobile', $responseHTML); // assert the disabled fields are not there FormFieldAssert::assertNotContainsInputField('pronoun', $responseHTML); FormFieldAssert::assertNotContainsInputField('firstname', $responseHTML); FormFieldAssert::assertNotContainsInputField('lastname', $responseHTML); FormFieldAssert::assertNotContainsInputField('email_goody', $responseHTML); FormFieldAssert::assertNotContainsSelectField('tshirt_size', $responseHTML); FormFieldAssert::assertNotContainsInputField('planned_arrival_date', $responseHTML); FormFieldAssert::assertNotContainsInputField('mobile_show', $responseHTML); FormFieldAssert::assertNotContainsInputField('dect', $responseHTML); } /** * Renders the registration page with a maximum fields config. * Asserts that all fields are there. * * @covers \Engelsystem\Controllers\RegistrationController */ public function testViewMaximumConfig(): void { SignUpConfig::setMaximumConfig($this->config); $response = $this->subject->view(); $this->assertSame(200, $response->getStatusCode()); $responseHTML = $response->getBody()->__toString(); // assert the expected fields are there FormFieldAssert::assertContainsInputField('pronoun', $responseHTML); FormFieldAssert::assertContainsInputField('username', $responseHTML); FormFieldAssert::assertContainsInputField('email', $responseHTML); FormFieldAssert::assertContainsInputField('mobile', $responseHTML); FormFieldAssert::assertContainsInputField('password', $responseHTML); FormFieldAssert::assertContainsInputField('password_confirmation', $responseHTML); FormFieldAssert::assertContainsInputField('firstname', $responseHTML); FormFieldAssert::assertContainsInputField('lastname', $responseHTML); FormFieldAssert::assertContainsInputField('email_goody', $responseHTML); FormFieldAssert::assertContainsSelectField('tshirt_size', $responseHTML); FormFieldAssert::assertContainsInputField('planned_arrival_date', $responseHTML); FormFieldAssert::assertContainsInputField('mobile_show', $responseHTML); FormFieldAssert::assertContainsInputField('dect', $responseHTML); } /** * @covers \Engelsystem\Controllers\RegistrationController */ public function testViewAngelTypesOAuthPreselection(): void { SignUpConfig::setMinimumConfig($this->config); $angelTypes = $this->createAngelTypes(); $this->session->set('oauth2_connect_provider', 'test_oauth_provider'); $this->session->set('oauth2_groups', [$angelTypes[1]->name]); $this->oauth ->method('getSsoTeams') ->with('test_oauth_provider') ->willReturn( [ $angelTypes[1]->name => ['id' => $angelTypes[1]->id], $angelTypes[2]->name => ['id' => $angelTypes[2]->id], ], ); $response = $this->subject->view(); $this->assertSame(200, $response->getStatusCode()); $responseHTML = $response->getBody()->__toString(); // assert that the unrestricted angel type is there and checked FormFieldAssert::assertContainsCheckedCheckbox('angel_types_' . $angelTypes[0]->id, $responseHTML); // assert that the first restricted angel type from oauth is there and checked FormFieldAssert::assertContainsCheckedCheckbox('angel_types_' . $angelTypes[1]->id, $responseHTML); // assert that the second restricted angel type not in oauth is there and not checked FormFieldAssert::assertContainsUncheckedCheckbox('angel_types_' . $angelTypes[2]->id, $responseHTML); // assert that the angel type with "hide_register" = true is not there FormFieldAssert::assertNotContainsInputField('angel_types_' . $angelTypes[3]->id, $responseHTML); } /** * @covers \Engelsystem\Controllers\RegistrationController */ public function testViewAngelTypesPreselection(): void { $angelTypes = $this->createAngelTypes(); SignUpConfig::setMinimumConfig($this->config); $response = $this->subject->view(); $this->assertSame(200, $response->getStatusCode()); $responseHTML = $response->getBody()->__toString(); // assert that the unrestricted angel type is there and checked FormFieldAssert::assertContainsCheckedCheckbox('angel_types_' . $angelTypes[0]->id, $responseHTML); // assert that restricted angel type are there and not checked FormFieldAssert::assertContainsUncheckedCheckbox('angel_types_' . $angelTypes[1]->id, $responseHTML); FormFieldAssert::assertContainsUncheckedCheckbox('angel_types_' . $angelTypes[2]->id, $responseHTML); // assert that the angel type with "hide_register" = true is not there FormFieldAssert::assertNotContainsInputField('angel_types_' . $angelTypes[3]->id, $responseHTML); } /** * Asserts that values are prefilled after submit * * @covers \Engelsystem\Controllers\RegistrationController */ public function testViewValuesAfterSubmit(): void { $angelTypes = $this->createAngelTypes(); // fake submit and set form-data in session $this->session->set('form-data-register-submit', '1'); $this->session->set('form-data-angel_types_' . $angelTypes[1]->id, '1'); SignUpConfig::setMinimumConfig($this->config); $response = $this->subject->view(); $this->assertSame(200, $response->getStatusCode()); $responseHTML = $response->getBody()->__toString(); // assert that the unrestricted angel type is not checked FormFieldAssert::assertContainsUncheckedCheckbox('angel_types_' . $angelTypes[0]->id, $responseHTML); // assert that the restricted angel type is checked FormFieldAssert::assertContainsCheckedCheckbox('angel_types_' . $angelTypes[1]->id, $responseHTML); } /** * Creates three angel types: * - unrestricted * - restricted * - unrestricted, hidden on registration * * @return Array */ private function createAngelTypes(): array { $angelType1 = AngelType::create([ 'name' => 'Test angel type 1', ]); $angelType2 = AngelType::create([ 'name' => 'Test angel type 2', 'restricted' => true, ]); $angelType3 = AngelType::create([ 'name' => 'Test angel type 3', 'restricted' => true, ]); $angelType4 = AngelType::create([ 'name' => 'Test angel type 4', 'hide_register' => true, ]); $this->modelsToBeDeleted[] = $angelType1; $this->modelsToBeDeleted[] = $angelType2; $this->modelsToBeDeleted[] = $angelType3; $this->modelsToBeDeleted[] = $angelType4; return [$angelType1, $angelType2, $angelType3, $angelType4]; } private function deleteModels(): void { foreach ($this->modelsToBeDeleted as $modelToBeDeleted) { $modelToBeDeleted->delete(); } } }