@Test(expected = MenuItemAccessException.class) public void testApproveContentAccessRight_noPublish() { // Data for test: MenuItemEntity menuItemPolitics = factory.createSectionMenuItem( "Opinion", 40, "Unordered", "Opinion", "The Newspaper", "aru", "aru", "en", "Hello World!", 10, false, null, false, null); fixture.save(menuItemPolitics); MenuItemAccessEntity allRightsUserAccess = factory.createMenuItemAccess( "Opinion", 40, fixture.findGroupByName("aru_group"), "read, create, update, delete, add, publish"); MenuItemAccessEntity readOnlyUserAccess = factory.createMenuItemAccess( "Opinion", 40, fixture.findGroupByName("nru_group"), "read, update, delete, add"); fixture.save(allRightsUserAccess, readOnlyUserAccess); ContentEntity contentOpinionPro = factory.createContent("Articles", "en", "aru", "0", new Date()); ContentEntity contentOpinionAgainst = factory.createContent("Articles", "en", "aru", "0", new Date()); fixture.save(contentOpinionPro, contentOpinionAgainst); ContentKey proKey = contentOpinionPro.getKey(); ContentKey againstKey = contentOpinionAgainst.getKey(); SectionContentEntity sectionContentPro = factory.createContentSection("Opinion", 40, proKey, true, 1); SectionContentEntity sectionContentAgainst = factory.createContentSection("Opinion", 40, againstKey, true, 2); fixture.save(sectionContentPro, sectionContentAgainst); fixture.flushAndClearHibernateSesssion(); // Assert that all data is set up correctly MenuItemEntity section = fixture.findMenuItemByName("Opinion", 40); assertEquals(2, section.getSectionContents().size()); final UserEntity noPublishRightUser = fixture.findUserByName("nru"); // Try unapprove content UnapproveSectionContentCommand unapproveCommand = new UnapproveSectionContentCommand(); unapproveCommand.setUpdater(noPublishRightUser.getKey()); unapproveCommand.setSection(fixture.findMenuItemByName("Opinion", 40).getMenuItemKey()); unapproveCommand.addUnapprovedContentToUpdate(contentOpinionAgainst.getKey()); menuItemService.unapproveSectionContent(unapproveCommand); fixture.flushAndClearHibernateSesssion(); }
@Test public void testApprovingAndUnapprovingContentInSection() { // Data for test: MenuItemEntity menuItemPolitics = factory.createSectionMenuItem( "Opinion", 40, "Unordered", "Opinion", "The Newspaper", "aru", "aru", "en", "Hello World!", 10, false, null, false, null); fixture.save(menuItemPolitics); MenuItemAccessEntity allRightsUserAccess = factory.createMenuItemAccess( "Opinion", 40, fixture.findGroupByName("aru_group"), "read, create, update, delete, add, publish"); MenuItemAccessEntity readOnlyUserAccess = factory.createMenuItemAccess("Opinion", 40, fixture.findGroupByName("nru_group"), "read"); MenuItemAccessEntity publishOnlyUserAccess = factory.createMenuItemAccess( "Opinion", 40, fixture.findGroupByName("publish_group"), "read, publish"); fixture.save(allRightsUserAccess, readOnlyUserAccess, publishOnlyUserAccess); ContentEntity contentOpinionPro = factory.createContent("Articles", "en", "aru", "0", new Date()); ContentEntity contentOpinionAgainst = factory.createContent("Articles", "en", "aru", "0", new Date()); fixture.save(contentOpinionPro, contentOpinionAgainst); ContentKey proKey = contentOpinionPro.getKey(); ContentKey againstKey = contentOpinionAgainst.getKey(); SectionContentEntity sectionContentPro = factory.createContentSection("Opinion", 40, proKey, true, 1); SectionContentEntity sectionContentAgainst = factory.createContentSection("Opinion", 40, againstKey, true, 2); fixture.save(sectionContentPro, sectionContentAgainst); fixture.flushAndClearHibernateSesssion(); // Assert that all data is set up correctly MenuItemEntity section = fixture.findMenuItemByName("Opinion", 40); assertEquals(2, section.getSectionContents().size()); final UserEntity publishOnlyUser = fixture.findUserByName("publish"); // Unapprove content UnapproveSectionContentCommand unapproveCommand = new UnapproveSectionContentCommand(); unapproveCommand.setUpdater(publishOnlyUser.getKey()); unapproveCommand.setSection(fixture.findMenuItemByName("Opinion", 40).getMenuItemKey()); unapproveCommand.addUnapprovedContentToUpdate(contentOpinionAgainst.getKey()); menuItemService.unapproveSectionContent(unapproveCommand); fixture.flushAndClearHibernateSesssion(); // Assert that all data is updated correctly MenuItemEntity testSection = fixture.findMenuItemByName("Opinion", 40); Set<SectionContentEntity> storedSectionContents = testSection.getSectionContents(); assertEquals(2, storedSectionContents.size()); Iterator<SectionContentEntity> secCntIterator = storedSectionContents.iterator(); boolean proContentChecked = false, againstContentChecked = false; while (secCntIterator.hasNext()) { SectionContentEntity secCntLoopHolder = secCntIterator.next(); int loopHolderKey = secCntLoopHolder.getContent().getKey().toInt(); if (loopHolderKey == contentOpinionAgainst.getKey().toInt()) { assertEquals(false, secCntLoopHolder.isApproved()); againstContentChecked = true; } else if (loopHolderKey == contentOpinionPro.getKey().toInt()) { assertEquals(true, secCntLoopHolder.isApproved()); proContentChecked = true; } } assertTrue(proContentChecked && againstContentChecked); // Switch approved and unapproved content: unapproveCommand = new UnapproveSectionContentCommand(); unapproveCommand.setUpdater(publishOnlyUser.getKey()); unapproveCommand.setSection(fixture.findMenuItemByName("Opinion", 40).getMenuItemKey()); unapproveCommand.addUnapprovedContentToUpdate(contentOpinionPro.getKey()); menuItemService.unapproveSectionContent(unapproveCommand); ApproveSectionContentCommand approveCommand = new ApproveSectionContentCommand(); approveCommand.setUpdater(publishOnlyUser.getKey()); approveCommand.setSection(fixture.findMenuItemByName("Opinion", 40).getMenuItemKey()); approveCommand.addApprovedContentToUpdate(contentOpinionAgainst.getKey()); menuItemService.approveSectionContent(approveCommand); fixture.flushAndClearHibernateSesssion(); // Assert that all data is updated correctly VerifyFinalResultOfApproveUnapproveTest( contentOpinionPro.getKey().toInt(), contentOpinionAgainst.getKey().toInt()); // Try switching the approved unapproved setting, with a user that does not have the necessary // rights to do so: unapproveCommand = new UnapproveSectionContentCommand(); unapproveCommand.setUpdater(fixture.findUserByName("nru").getKey()); unapproveCommand.setSection(fixture.findMenuItemByName("Opinion", 40).getMenuItemKey()); unapproveCommand.addUnapprovedContentToUpdate(contentOpinionAgainst.getKey()); try { menuItemService.unapproveSectionContent(unapproveCommand); fail("Not in the catch block. Unapproving content should not be allowed for this user."); } catch (MenuItemAccessException e) { // All OK } approveCommand = new ApproveSectionContentCommand(); approveCommand.setUpdater(fixture.findUserByName("nru").getKey()); approveCommand.setSection(fixture.findMenuItemByName("Opinion", 40).getMenuItemKey()); approveCommand.addApprovedContentToUpdate(contentOpinionPro.getKey()); try { menuItemService.approveSectionContent(approveCommand); fail("Not in the catch block. Approving content should not be allowed for this user."); } catch (MenuItemAccessException e) { // All OK } // That nothing has changed VerifyFinalResultOfApproveUnapproveTest( contentOpinionPro.getKey().toInt(), contentOpinionAgainst.getKey().toInt()); }