package fi.otavanopisto.muikku.ui.base.announcer; import static fi.otavanopisto.muikku.mock.PyramusMock.mocker; import static org.junit.Assert.assertTrue; import java.sql.Date; import java.time.OffsetDateTime; import java.time.ZoneOffset; import java.util.ArrayList; import java.util.List; import org.junit.Test; import com.fasterxml.jackson.core.JsonProcessingException; import fi.otavanopisto.muikku.TestUtilities; import fi.otavanopisto.muikku.atests.Workspace; import fi.otavanopisto.muikku.mock.PyramusMock.Builder; import fi.otavanopisto.muikku.mock.model.MockCourseStudent; import fi.otavanopisto.muikku.mock.model.MockStaffMember; import fi.otavanopisto.muikku.mock.model.MockStudent; import fi.otavanopisto.muikku.ui.AbstractUITest; import fi.otavanopisto.pyramus.rest.model.Sex; import fi.otavanopisto.pyramus.rest.model.UserRole; public class AnnouncerTestsBase extends AbstractUITest { @Test public void createAnnouncementTest() throws JsonProcessingException, Exception { MockStaffMember admin = new MockStaffMember(1l, 1l, "Admin", "User", UserRole.ADMINISTRATOR, "121212-1234", "admin@example.com", Sex.MALE); Builder mockBuilder = mocker(); mockBuilder.addStaffMember(admin).mockLogin(admin).build(); try{ try{ login(); maximizeWindow(); navigate("/announcer", true); waitAndClick(".an-new-announcement"); waitForPresent(".cke_wysiwyg_frame"); waitForPresent("*[name='endDate']"); clearElement("*[name='endDate']"); sendKeys("*[name='endDate']", "21.12.2025"); sendKeys(".mf-textfield-subject", "Test title"); click(".mf-form-header"); waitForPresent("#ui-datepicker-div"); waitForNotVisible("#ui-datepicker-div"); addTextToCKEditor("Announcer test announcement"); waitAndClick(".mf-toolbar input[name='send']"); waitForPresent(".an-announcement-topic"); assertTextIgnoreCase(".an-announcement-topic>span", "Test title"); assertTextIgnoreCase(".an-announcement-content>p", "Announcer test announcement"); }finally{ deleteAnnouncements(); } }finally { mockBuilder.wiremockReset(); } } @Test public void deleteAnnouncementTest() throws JsonProcessingException, Exception { MockStaffMember admin = new MockStaffMember(1l, 1l, "Admin", "User", UserRole.ADMINISTRATOR, "121212-1234", "admin@example.com", Sex.MALE); Builder mockBuilder = mocker(); mockBuilder.addStaffMember(admin).mockLogin(admin).build(); try{ try{ login(); maximizeWindow(); navigate("/announcer", true); waitAndClick(".an-new-announcement"); waitForPresent(".cke_wysiwyg_frame"); waitForPresent("*[name='endDate']"); clearElement("*[name='endDate']"); sendKeys("*[name='endDate']", "21.12.2025"); sendKeys(".mf-textfield-subject", "Test title"); click(".mf-form-header"); waitForPresent("#ui-datepicker-div"); waitForNotVisible("#ui-datepicker-div"); addTextToCKEditor("Announcer test announcement"); waitAndClick(".mf-toolbar input[name='send']"); waitForPresent(".an-announcement-topic"); waitAndClick(".an-announcement-select input"); waitAndClick(".mf-items-toolbar .icon-delete"); waitAndClick(".mf-toolbar input[name='send']"); reloadCurrentPage(); assertTrue("Element found even though it shouldn't be there", isElementPresent(".an-announcement-topic>span") == false); }finally{ deleteAnnouncements(); } }finally { mockBuilder.wiremockReset(); } } @Test public void announcementVisibleInFrontpageWidgetTest() throws JsonProcessingException, Exception { MockStaffMember admin = new MockStaffMember(1l, 1l, "Admin", "User", UserRole.ADMINISTRATOR, "121212-1234", "admin@example.com", Sex.MALE); MockStudent student = new MockStudent(2l, 2l, "Student", "Tester", "student@example.com", 1l, OffsetDateTime.of(1990, 2, 2, 0, 0, 0, 0, ZoneOffset.UTC), "121212-1212", Sex.FEMALE, TestUtilities.toDate(2012, 1, 1), TestUtilities.getNextYear()); Builder mockBuilder = mocker(); try { mockBuilder.addStaffMember(admin).addStudent(student).mockLogin(admin).build(); login(); try{ createAnnouncement(admin.getId(), "Test title", "Announcer test announcement", date(115, 10, 12), date(125, 10, 12), false, true, null); logout(); mockBuilder.mockLogin(student); login(); waitForPresentAndVisible("#announcements ul>li>div>a"); assertTextIgnoreCase("#announcements ul>li>div>a", "Test title"); }finally{ deleteAnnouncements(); } }finally { mockBuilder.wiremockReset(); } } @Test public void announcementListTest() throws JsonProcessingException, Exception { MockStaffMember admin = new MockStaffMember(1l, 1l, "Admin", "User", UserRole.ADMINISTRATOR, "121212-1234", "admin@example.com", Sex.MALE); MockStudent student = new MockStudent(2l, 2l, "Student", "Tester", "student@example.com", 1l, OffsetDateTime.of(1990, 2, 2, 0, 0, 0, 0, ZoneOffset.UTC), "121212-1212", Sex.FEMALE, TestUtilities.toDate(2012, 1, 1), TestUtilities.getNextYear()); Builder mockBuilder = mocker(); try{ mockBuilder.addStaffMember(admin).addStudent(student).mockLogin(admin).build(); login(); try{ createAnnouncement(admin.getId(), "Test title", "Announcer test announcement", date(115, 10, 12), date(125, 10, 12), false, true, null); logout(); mockBuilder.mockLogin(student); login(); waitForPresentAndVisible("#announcements ul>li>div>a"); assertTextIgnoreCase("#announcements ul>li>div>a", "Test title"); navigate("/announcements", true); waitForPresent("#announcementContextNavigation .gc-navigation-item"); assertTextIgnoreCase("#announcementContextNavigation .gc-navigation-item a", "Test title"); click("#announcementContextNavigation .gc-navigation-item a"); waitForPresent(".announcement-article h2"); assertTextIgnoreCase(".announcement-article h2", "Test title"); assertTextIgnoreCase(".announcement-article div.article-datetime", "12.11.2015"); assertTextIgnoreCase(".announcement-article div.article-context", "announcer test announcement"); }finally{ deleteAnnouncements(); } }finally { mockBuilder.wiremockReset(); } } @Test public void userGroupAnnouncementVisibleTest() throws JsonProcessingException, Exception { MockStaffMember admin = new MockStaffMember(1l, 1l, "Admin", "User", UserRole.ADMINISTRATOR, "121212-1234", "admin@example.com", Sex.MALE); MockStudent student = new MockStudent(2l, 2l, "Student", "Tester", "student@example.com", 1l, OffsetDateTime.of(1990, 2, 2, 0, 0, 0, 0, ZoneOffset.UTC), "121212-1212", Sex.FEMALE, TestUtilities.toDate(2012, 1, 1), TestUtilities.getNextYear()); Builder mockBuilder = mocker(); try{ mockBuilder.addStaffMember(admin).addStudent(student).addStudentGroup(2l, "Test group", "Test group for users", 1l, false).addStudentToStudentGroup(2l, student).addStaffMemberToStudentGroup(2l, admin).mockLogin(admin).build(); login(); try{ List<Long> userGroups = new ArrayList<>(); userGroups.add(2l); createAnnouncement(admin.getId(), "Test title", "Announcer test announcement", date(115, 10, 12), date(125, 10, 12), false, false, userGroups); logout(); mockBuilder.mockLogin(student); login(); waitForPresent("#announcements ul>li>div>a"); assertTextIgnoreCase("#announcements ul>li>div>a", "Test title"); }finally{ deleteAnnouncements(); deleteUserGroup(2l); } }finally { mockBuilder.wiremockReset(); } } @Test public void userGroupAnnouncementNotVisibleTest() throws JsonProcessingException, Exception { MockStaffMember admin = new MockStaffMember(1l, 1l, "Admin", "User", UserRole.ADMINISTRATOR, "121212-1234", "admin@example.com", Sex.MALE); MockStudent student = new MockStudent(2l, 2l, "Student", "Tester", "student@example.com", 1l, OffsetDateTime.of(1990, 2, 2, 0, 0, 0, 0, ZoneOffset.UTC), "121212-1212", Sex.FEMALE, TestUtilities.toDate(2012, 1, 1), TestUtilities.getNextYear()); Builder mockBuilder = mocker(); try { mockBuilder.addStaffMember(admin).addStudent(student).addStudentGroup(2l, "Test group", "Test group for users", 1l, false).addStaffMemberToStudentGroup(2l, admin).mockLogin(admin).build(); login(); try{ List<Long> userGroups = new ArrayList<>(); userGroups.add(2l); createAnnouncement(admin.getId(), "Test title", "Announcer test announcement", date(115, 10, 12), date(125, 10, 12), false, false, userGroups); logout(); mockBuilder.mockLogin(student); login(); waitForPresent("#announcements"); assertTrue("Element found even though it shouldn't be there", isElementPresent("#announcements ul>li>div>a") == false); }finally{ deleteAnnouncements(); } }finally { mockBuilder.wiremockReset(); } } @Test public void pastAnnnouncementsListTest() throws JsonProcessingException, Exception { MockStaffMember admin = new MockStaffMember(1l, 1l, "Admin", "User", UserRole.ADMINISTRATOR, "121212-1234", "admin@example.com", Sex.MALE); MockStudent student = new MockStudent(2l, 2l, "Student", "Tester", "student@example.com", 1l, OffsetDateTime.of(1990, 2, 2, 0, 0, 0, 0, ZoneOffset.UTC), "121212-1212", Sex.FEMALE, TestUtilities.toDate(2012, 1, 1), TestUtilities.getNextYear()); Long courseId = 1l; Builder mockBuilder = mocker(); mockBuilder.addStaffMember(admin).addStudent(student).mockLogin(admin).build(); login(); Workspace workspace = createWorkspace("testcourse", "test course for testing", String.valueOf(courseId), Boolean.TRUE); MockCourseStudent mcs = new MockCourseStudent(2l, courseId, student.getId()); mockBuilder.addCourseStudent(workspace.getId(), mcs).build(); createAnnouncement(admin.getId(), "Test title", "Announcer test announcement", date(115, 10, 12), date(115, 10, 15), false, true, null); try { navigate("/announcer", true); waitForPresent("div.mf-content-empty"); waitAndClick("li.an-category[data-folder-id~=\"past\"]"); waitForPresent("div.an-announcement-topic>span"); assertTextIgnoreCase("div.an-announcement-topic>span", "Test title"); navigate("/announcements", true); waitForPresent("#announcements"); assertNotPresent(".announcement-article>header"); }finally{ deleteAnnouncements(); deleteWorkspace(workspace.getId()); mockBuilder.wiremockReset(); } } @Test public void myAnnnouncementsListTest() throws JsonProcessingException, Exception { MockStaffMember admin = new MockStaffMember(1l, 1l, "Admin", "User", UserRole.ADMINISTRATOR, "121212-1234", "admin@example.com", Sex.MALE); MockStudent student = new MockStudent(2l, 2l, "Student", "Tester", "student@example.com", 1l, OffsetDateTime.of(1990, 2, 2, 0, 0, 0, 0, ZoneOffset.UTC), "121212-1212", Sex.FEMALE, TestUtilities.toDate(2012, 1, 1), TestUtilities.getNextYear()); MockStaffMember another = new MockStaffMember(3l, 3l, "Another", "User", UserRole.ADMINISTRATOR, "121212-1234", "blaablaa@example.com", Sex.MALE); Long courseId = 1l; Builder mockBuilder = mocker(); mockBuilder.addStaffMember(admin).addStaffMember(another).addStudent(student).mockLogin(admin).build(); login(); Workspace workspace = createWorkspace("testcourse", "test course for testing", String.valueOf(courseId), Boolean.TRUE); MockCourseStudent mcs = new MockCourseStudent(2l, courseId, student.getId()); mockBuilder.addCourseStudent(workspace.getId(), mcs).build(); createAnnouncement(admin.getId(), "Test title", "Announcer test announcement", date(115, 10, 12), new java.util.Date(), false, true, null); createAnnouncement(another.getId(), "Another test title", "Another announcer test announcement", date(115, 10, 12), new java.util.Date(), false, true, null); try { navigate("/announcer", true); waitForPresent(".an-announcement-topic"); assertCount("div.an-announcement-topic>span" ,2); waitAndClick("li.an-category[data-folder-id~=\"mine\"]"); waitForPresent("li.an-category.selected[data-folder-id~=\"mine\"]"); waitForPresent("div.an-announcement-topic>span"); assertTextIgnoreCase("div.an-announcement-topic>span", "Test title"); assertCount("div.an-announcement-topic>span" ,1); }finally{ deleteAnnouncements(); deleteWorkspace(workspace.getId()); mockBuilder.wiremockReset(); } } @Test public void archivedAnnouncementListTest() throws JsonProcessingException, Exception { MockStaffMember admin = new MockStaffMember(1l, 1l, "Admin", "User", UserRole.ADMINISTRATOR, "121212-1234", "admin@example.com", Sex.MALE); Builder mockBuilder = mocker(); mockBuilder.addStaffMember(admin).mockLogin(admin).build(); try{ try{ login(); maximizeWindow(); navigate("/announcer", true); waitAndClick(".an-new-announcement"); waitForPresent(".cke_wysiwyg_frame"); waitForPresent("*[name='endDate']"); clearElement("*[name='endDate']"); sendKeys("*[name='endDate']", "21.12.2025"); sendKeys(".mf-textfield-subject", "Test title"); click(".mf-form-header"); waitForPresent("#ui-datepicker-div"); waitForNotVisible("#ui-datepicker-div"); addTextToCKEditor("Announcer test announcement"); waitAndClick(".mf-toolbar input[name='send']"); waitForPresent(".an-announcement-topic"); waitAndClick(".an-announcement-select input"); waitAndClick(".mf-items-toolbar .icon-delete"); waitAndClick(".mf-toolbar input[name='send']"); reloadCurrentPage(); assertTrue("Element found even though it shouldn't be there", isElementPresent(".an-announcement-topic>span") == false); waitAndClick("li.an-category[data-folder-id~=\"archived\"]"); waitForPresent("li.an-category.selected[data-folder-id~=\"archived\"]"); waitForPresent("div.an-announcement-topic>span"); assertTextIgnoreCase("div.an-announcement-topic>span", "Test title"); }finally{ deleteAnnouncements(); } }finally { mockBuilder.wiremockReset(); } } }