Signed-off-by: Pekka Helenius <fincer89@hotmail.com>v0.0.4-alpha
@ -0,0 +1,57 @@ | |||
// Pekka Helenius <fincer89@hotmail.com>, Fjordtek 2020 | |||
package com.fjordtek.bookstore.web.webform.endpoint; | |||
import static org.assertj.core.api.Assertions.assertThat; | |||
import org.junit.Test; | |||
import org.junit.jupiter.api.MethodOrderer.Alphanumeric; | |||
import org.junit.jupiter.api.TestMethodOrder; | |||
import org.springframework.security.test.context.support.WithUserDetails; | |||
import com.fjordtek.bookstore.web.BookStoreTestWebContextBuilder; | |||
/** | |||
* Web application end point test | |||
* <p> | |||
* <b>Test target</b>: list page, apiref page | |||
* | |||
* @author Pekka Helenius | |||
*/ | |||
@TestMethodOrder(Alphanumeric.class) | |||
public class ApirefTest extends BookStoreTestWebContextBuilder { | |||
@Test | |||
public void testA_ApirefLinkNotPresentAsNormalUser() throws Exception { | |||
assertThat( | |||
pageContentsList().contains("href=\"" + env.getProperty("page.url.apiref") ) | |||
).isEqualTo(false); | |||
} | |||
@Test | |||
@WithUserDetails("admin") | |||
public void testB_ApirefLinkPresentAsAdminUser() throws Exception { | |||
assertThat( | |||
pageContentsList().contains("href=\"" + env.getProperty("page.url.apiref") ) | |||
).isEqualTo(true); | |||
} | |||
@Test | |||
@WithUserDetails("admin") | |||
public void testC_ApirefFormFieldsExistAsAdminUser() throws Exception { | |||
assertThat( | |||
pageContentsApiref().contains("id=\"apireftable\"") | |||
).isEqualTo(true); | |||
} | |||
@Test | |||
public void testD_ApirefFormNotPresentAsNologin() throws Exception { | |||
/* | |||
* Expect redirect, not 403 | |||
* Unauthorized users: we pretend the resource (end point) does not exist at all | |||
*/ | |||
loadPageGet(env.getProperty("page.url.apiref"), 302); | |||
} | |||
} |
@ -0,0 +1,96 @@ | |||
// Pekka Helenius <fincer89@hotmail.com>, Fjordtek 2020 | |||
package com.fjordtek.bookstore.web.webform.endpoint; | |||
import static org.assertj.core.api.Assertions.assertThat; | |||
import org.junit.Test; | |||
import org.junit.jupiter.api.MethodOrderer.Alphanumeric; | |||
import org.junit.jupiter.api.TestMethodOrder; | |||
import org.springframework.security.test.context.support.WithUserDetails; | |||
import com.fjordtek.bookstore.web.BookStoreTestWebContextBuilder; | |||
/** | |||
* Web application end point test | |||
* <p> | |||
* <b>Test target</b>: list page, add page | |||
* | |||
* @author Pekka Helenius | |||
*/ | |||
@TestMethodOrder(Alphanumeric.class) | |||
public class BookaddTest extends BookStoreTestWebContextBuilder { | |||
@Test | |||
@WithUserDetails("user") | |||
public void testA_AddLinkNotPresentAsNormalUser() throws Exception { | |||
assertThat( | |||
pageContentsList().contains("href=\"" + env.getProperty("page.url.add") ) | |||
).isEqualTo(false); | |||
} | |||
@Test | |||
@WithUserDetails("admin") | |||
public void testB_AddLinkPresentAsAdminUser() throws Exception { | |||
assertThat( | |||
pageContentsList().contains("href=\"" + env.getProperty("page.url.add") ) | |||
).isEqualTo(true); | |||
} | |||
@Test | |||
@WithUserDetails("admin") | |||
public void testC_AddFormFieldsExistAsAdminUser() throws Exception { | |||
loadPageGet(env.getProperty("page.url.add"), 200); | |||
} | |||
@Test | |||
public void testD_AddFormNotPresentAsNologin() throws Exception { | |||
/* | |||
* Expect redirect, not 403 | |||
* Unauthorized users: we pretend the resource (end point) does not exist at all | |||
*/ | |||
loadPageGet(env.getProperty("page.url.add"), 302); | |||
} | |||
@Test | |||
@WithUserDetails("salesmanager") | |||
public void testE_AddPriceIsPresentAsMarketingUser() throws Exception { | |||
assertThat( | |||
pageContentsEdit().contains("id=\"price") | |||
).isEqualTo(true); | |||
} | |||
@Test | |||
@WithUserDetails("salesmanager") | |||
public void testF_AddPublishIsPresentAsMarketingUser() throws Exception { | |||
assertThat( | |||
pageContentsEdit().contains("id=\"publish") | |||
).isEqualTo(true); | |||
} | |||
@Test | |||
@WithUserDetails("helpdesk") | |||
public void testG_AddPriceNotPresentAsHelpDeskUser() throws Exception { | |||
assertThat( | |||
pageContentsEdit().contains("id=\"price") | |||
).isEqualTo(false); | |||
} | |||
@Test | |||
@WithUserDetails("helpdesk") | |||
public void testH_AddPublishNotPresentAsHelpDeskUser() throws Exception { | |||
assertThat( | |||
pageContentsEdit().contains("id=\"publish") | |||
).isEqualTo(false); | |||
} | |||
@Test | |||
@WithUserDetails("admin") | |||
public void testI_EditFormLoginoutFormIsPresentAsAdmin() throws Exception { | |||
assertThat( | |||
pageContentsAdd().contains("id=\"bookstore-loginout\"") | |||
).isEqualTo(true); | |||
} | |||
} |
@ -0,0 +1,51 @@ | |||
// Pekka Helenius <fincer89@hotmail.com>, Fjordtek 2020 | |||
package com.fjordtek.bookstore.web.webform.endpoint; | |||
import static org.assertj.core.api.Assertions.assertThat; | |||
import org.junit.Test; | |||
import org.junit.jupiter.api.MethodOrderer.Alphanumeric; | |||
import org.junit.jupiter.api.TestMethodOrder; | |||
import org.springframework.security.test.context.support.WithUserDetails; | |||
import com.fjordtek.bookstore.web.BookStoreTestWebContextBuilder; | |||
/** | |||
* Web application end point test | |||
* <p> | |||
* <b>Test target</b>: list page, delete page | |||
* | |||
* @author Pekka Helenius | |||
*/ | |||
@TestMethodOrder(Alphanumeric.class) | |||
public class BookdeleteTest extends BookStoreTestWebContextBuilder { | |||
@Test | |||
@WithUserDetails("helpdesk") | |||
public void testA_DeleteLinkNotPresentAsHelpdeskUser() throws Exception { | |||
assertThat( | |||
pageContentsList().contains("href=\"/bookdelete") | |||
).isEqualTo(false); | |||
} | |||
@Test | |||
@WithUserDetails("user") | |||
public void testB_DeleteFailsAsNormalUser() throws Exception { | |||
loadPageGet(env.getProperty("page.url.delete") + "/" + hashId, 302); | |||
if (bookHashRepository.findByHashId(hashId) == null) { | |||
throw new Exception(); | |||
} | |||
} | |||
@Test | |||
@WithUserDetails("admin") | |||
public void testC_DeleteSucceedsAsAdminUser() throws Exception { | |||
loadPageGet(env.getProperty("page.url.delete") + "/" + hashId, 302); | |||
if (bookHashRepository.findByHashId(hashId) != null) { | |||
throw new Exception(); | |||
} | |||
} | |||
} |
@ -0,0 +1,99 @@ | |||
// Pekka Helenius <fincer89@hotmail.com>, Fjordtek 2020 | |||
package com.fjordtek.bookstore.web.webform.endpoint; | |||
import static org.assertj.core.api.Assertions.assertThat; | |||
import org.junit.Test; | |||
import org.junit.jupiter.api.MethodOrderer.Alphanumeric; | |||
import org.junit.jupiter.api.TestMethodOrder; | |||
import org.springframework.security.test.context.support.WithUserDetails; | |||
import com.fjordtek.bookstore.web.BookStoreTestWebContextBuilder; | |||
/** | |||
* Web application end point test | |||
* <p> | |||
* <b>Test target</b>: list page, edit page | |||
* | |||
* @author Pekka Helenius | |||
*/ | |||
@TestMethodOrder(Alphanumeric.class) | |||
public class BookeditTest extends BookStoreTestWebContextBuilder { | |||
@Test | |||
@WithUserDetails("user") | |||
public void testA_EditLinkNotPresentAsNormalUser() throws Exception { | |||
assertThat( | |||
pageContentsList().contains("href=\"" + env.getProperty("page.url.edit") ) | |||
).isEqualTo(false); | |||
} | |||
@Test | |||
@WithUserDetails("admin") | |||
public void testB_EditLinkPresentAsAdminUser() throws Exception { | |||
assertThat( | |||
pageContentsList().contains("href=\"" + env.getProperty("page.url.edit") ) | |||
).isEqualTo(true); | |||
} | |||
@Test | |||
@WithUserDetails("admin") | |||
public void testC_EditFieldsExistAsAdminUser() throws Exception { | |||
assertThat( | |||
pageContentsEdit().contains("class=\"bookform-section\"") | |||
).isEqualTo(true); | |||
} | |||
@Test | |||
public void testD_EditNotPresentAsNologin() throws Exception { | |||
/* | |||
* Expect redirect, not 403 | |||
* Unauthorized users: we pretend the resource (end point) does not exist at all | |||
*/ | |||
loadPageGet(env.getProperty("page.url.edit") + "/" + hashId, 302); | |||
} | |||
@Test | |||
@WithUserDetails("salesmanager") | |||
public void testE_EditPriceIsPresentAsMarketingUser() throws Exception { | |||
assertThat( | |||
pageContentsEdit().contains("id=\"price") | |||
).isEqualTo(true); | |||
} | |||
@Test | |||
@WithUserDetails("salesmanager") | |||
public void testF_EditPublishIsPresentAsMarketingUser() throws Exception { | |||
assertThat( | |||
pageContentsEdit().contains("id=\"publish") | |||
).isEqualTo(true); | |||
} | |||
@Test | |||
@WithUserDetails("helpdesk") | |||
public void testG_EditPriceNotPresentAsHelpDeskUser() throws Exception { | |||
assertThat( | |||
pageContentsEdit().contains("id=\"price") | |||
).isEqualTo(false); | |||
} | |||
@Test | |||
@WithUserDetails("helpdesk") | |||
public void testH_EditPublishNotPresentAsHelpDeskUser() throws Exception { | |||
assertThat( | |||
pageContentsEdit().contains("id=\"publish") | |||
).isEqualTo(false); | |||
} | |||
@Test | |||
@WithUserDetails("admin") | |||
public void testI_EditFormLoginoutFormIsPresentAsAdmin() throws Exception { | |||
assertThat( | |||
pageContentsEdit().contains("id=\"bookstore-loginout\"") | |||
).isEqualTo(true); | |||
} | |||
} |
@ -0,0 +1,161 @@ | |||
// Pekka Helenius <fincer89@hotmail.com>, Fjordtek 2020 | |||
package com.fjordtek.bookstore.web.webform.endpoint; | |||
import static org.assertj.core.api.Assertions.assertThat; | |||
import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestBuilders.formLogin; | |||
import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestBuilders.logout; | |||
import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.csrf; | |||
import static org.springframework.security.test.web.servlet.response.SecurityMockMvcResultMatchers.authenticated; | |||
import static org.springframework.security.test.web.servlet.response.SecurityMockMvcResultMatchers.unauthenticated; | |||
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; | |||
import java.util.Arrays; | |||
import org.junit.Test; | |||
import org.junit.jupiter.api.MethodOrderer.Alphanumeric; | |||
import org.junit.jupiter.api.TestMethodOrder; | |||
import org.springframework.security.test.context.support.WithUserDetails; | |||
import com.fjordtek.bookstore.web.BookStoreTestWebContextBuilder; | |||
/** | |||
* Web application end point test | |||
* <p> | |||
* <b>Test target</b>: list page, log in, log out | |||
* | |||
* @author Pekka Helenius | |||
*/ | |||
@TestMethodOrder(Alphanumeric.class) | |||
public class BooklistTest extends BookStoreTestWebContextBuilder { | |||
@Test | |||
public void testA_CsrfTokenExists() throws Exception { | |||
mockMvc.perform( | |||
post(env.getProperty("page.url.list")) | |||
.with(csrf()) | |||
); | |||
} | |||
@Test | |||
public void testB_ExternalFooterLoads() throws Exception { | |||
assertThat(pageContentsList().contains("footer-items")) | |||
.isEqualTo(true); | |||
} | |||
@Test | |||
public void testC_LoginFormExists() throws Exception { | |||
String[] loginKeywords = { | |||
"id=\"bookstore-loginout\"", | |||
"login-submit", | |||
"username", | |||
"password" | |||
}; | |||
assertThat( | |||
Arrays.stream(loginKeywords).allMatch(pageContentsList()::contains) | |||
).isEqualTo(true); | |||
} | |||
@Test | |||
public void testD_AuthFailureOccurs() throws Exception { | |||
mockMvc | |||
.perform( | |||
formLogin(env.getProperty("page.url.list")) | |||
.loginProcessingUrl(env.getProperty("page.url.login")) | |||
.user( | |||
env.getProperty("auth.field.username"), "foo" | |||
) | |||
.password( | |||
env.getProperty("auth.field.password"), "bar" | |||
) | |||
) | |||
.andExpect(unauthenticated()); | |||
} | |||
/* | |||
@Test | |||
public void testAuthFailureOccursFormCharacterOverflow() throws Exception { | |||
int charCount = 100000; | |||
byte[] bytes = new byte[charCount]; | |||
new Random().nextBytes(bytes); | |||
StringBuilder shaStringBuilder = new StringBuilder(); | |||
for (byte b : bytes) { | |||
shaStringBuilder.append(String.format("%02x", b)); | |||
} | |||
String inputString = shaStringBuilder.toString(); | |||
mockMvc | |||
.perform( | |||
formLogin(env.getProperty("page.url.list")) | |||
.loginProcessingUrl(env.getProperty("page.url.login")) | |||
.user( | |||
env.getProperty("auth.field.username"), inputString | |||
) | |||
.password( | |||
env.getProperty("auth.field.password"), inputString | |||
) | |||
) | |||
.andExpect(unauthenticated()); | |||
} | |||
*/ | |||
@Test | |||
public void testE_AuthSuccessOccurs() throws Exception { | |||
mockMvc | |||
.perform( | |||
formLogin(env.getProperty("page.url.list")) | |||
.loginProcessingUrl(env.getProperty("page.url.login")) | |||
.user( | |||
env.getProperty("auth.field.username"), "admin" | |||
) | |||
.password( | |||
env.getProperty("auth.field.password"), "admin" | |||
) | |||
) | |||
.andExpect(authenticated()); | |||
} | |||
@Test | |||
@WithUserDetails("salesmanager") | |||
public void testF_BookListIsPresentAsMarketingUser() throws Exception { | |||
assertThat( | |||
pageContentsList().contains("id=\"booklist\"") | |||
).isEqualTo(true); | |||
} | |||
@Test | |||
@WithUserDetails("user") | |||
public void testG_BookListIsPresentAsNormalUser() throws Exception { | |||
assertThat( | |||
pageContentsList().contains("id=\"booklist\"") | |||
).isEqualTo(true); | |||
} | |||
@Test | |||
public void testH_BookListIsNotPresentAsNologin() throws Exception { | |||
assertThat( | |||
pageContentsList().contains("id=\"booklist\"") | |||
).isEqualTo(false); | |||
} | |||
@Test | |||
@WithUserDetails("salesmanager") | |||
public void testI_LogoutSucceedsAsMarketingUser() throws Exception { | |||
mockMvc.perform( | |||
logout() | |||
.logoutUrl(env.getProperty("page.url.logout")) | |||
); | |||
} | |||
} |
@ -0,0 +1,30 @@ | |||
// Pekka Helenius <fincer89@hotmail.com>, Fjordtek 2020 | |||
package com.fjordtek.bookstore.web.webform.endpoint; | |||
import org.junit.Test; | |||
import org.junit.jupiter.api.MethodOrderer.Alphanumeric; | |||
import org.junit.jupiter.api.TestMethodOrder; | |||
import com.fjordtek.bookstore.web.BookStoreTestWebContextBuilder; | |||
/** | |||
* Web application end point test | |||
* <p> | |||
* <b>Test target</b>: index page, list page | |||
* | |||
* @author Pekka Helenius | |||
*/ | |||
@TestMethodOrder(Alphanumeric.class) | |||
public class IndexTest extends BookStoreTestWebContextBuilder { | |||
@Test | |||
public void testA_RedirectFromIndexPage() throws Exception { | |||
/* | |||
* Expect redirect | |||
*/ | |||
loadPageGet(env.getProperty("page.url.index"), 302); | |||
} | |||
} |