@Test public void testFindUniqueAttributes() { final AttributeDescriptorModel attributeDescriptor1 = new AttributeDescriptorModel(); attributeDescriptor1.setUnique(Boolean.TRUE); final Set<String> unique = new HashSet<String>(); unique.add("unique1"); final ItemModelConverter modelConverter = mock(ItemModelConverter.class); when(modelConverter.getUniqueAttributes()).thenReturn(unique); when(converterRegistry.getModelConverterBySourceType("model1")).thenReturn(modelConverter); final Set<String> actualUnique = typeService.getUniqueAttributes("model1"); Assert.assertEquals("One attribute expected", 1, actualUnique.size()); Assert.assertEquals("Unexpected attribute got", "unique1", actualUnique.iterator().next()); }
@Test public void testGetUniqueAttributesWithoutModelConverter() { final AttributeDescriptorModel attributeDescriptor1 = new AttributeDescriptorModel(); attributeDescriptor1.setUnique(Boolean.TRUE); final ModelConverter nonItemModelConverter = mock(ModelConverter.class); final ComposedTypeModel nonItemModel = mock(ComposedTypeModel.class); when(converterRegistry.getModelConverterBySourceType("nonItemModel")) .thenReturn(nonItemModelConverter); when((nonItemModel).getDeclaredattributedescriptors()) .thenReturn(Collections.singletonList(attributeDescriptor1)); when(typeDao.findComposedTypeByCode("nonItemModel")).thenReturn(nonItemModel); final Set<String> actualUnique = typeService.getUniqueAttributes("nonItemModel"); Assert.assertEquals("One attribute expected", 1, actualUnique.size()); }
@Test public void testFindMandatoryAttributesWithoutModelConverter() { final AttributeDescriptorModel attributeDescriptor1 = new AttributeDescriptorModel(); attributeDescriptor1.setModifiers(Integer.valueOf(AttributeDescriptor.WRITE_FLAG)); final ModelConverter nonItemModelConverter = mock(ModelConverter.class); final ComposedTypeModel nonItemModel = mock(ComposedTypeModel.class); when(converterRegistry.getModelConverterBySourceType("nonItemModel")) .thenReturn(nonItemModelConverter); when((nonItemModel).getDeclaredattributedescriptors()) .thenReturn(Collections.singletonList(attributeDescriptor1)); when(typeDao.findComposedTypeByCode("nonItemModel")).thenReturn(nonItemModel); final Set<String> actualMandatory = typeService.getMandatoryAttributes("nonItemModel", false); Assert.assertEquals("One attribute expected", 1, actualMandatory.size()); }
@Test public void testUniqueNullAttributeSlayerAPI() { final ComposedTypeModel typeUnderInvestigation = typeService.getComposedTypeForClass(LinkModel.class); final AttributeDescriptorModel attributeDesc = typeService.getAttributeDescriptor(typeUnderInvestigation, LinkModel.LANGUAGE); Assert.assertTrue(attributeDesc.getOptional().booleanValue()); Assert.assertTrue(attributeDesc.getUnique().booleanValue()); final LinkModel link1 = modelService.create(LinkModel.class); link1.setQualifier("link1"); link1.setSource(source); link1.setTarget(target); // the optional unique attribute link1.setLanguage(language); modelService.save(link1); // <-- OK! final LinkModel link2 = modelService.create(LinkModel.class); link2.setQualifier("link2"); link2.setSource(source); link2.setTarget(target); // the optional unique attribute link2.setLanguage(null); modelService.save(link2); // <-- OK! //<-- still OK, only one null value! final LinkModel link3 = modelService.create(LinkModel.class); link3.setQualifier("link3"); link3.setSource(source); link3.setTarget(target); // the optional unique attribute link3.setLanguage(null); boolean success = false; try { modelService.save(link3); // <-- what happens now?! Assert.fail( "Should have failed with 'ModelSavingException' for ambiguous unique attribute, which is 'null'"); } catch (final ModelSavingException e) { success = true; } Assert.assertTrue( "Should have failed with 'ModelSavingException' for ambiguous unique attribute, which is 'null'", success); }
/** creating some dummy data. */ @Before public void init() { modelService = createMock(ModelService.class); preparer = new AttributeConstraintPreparer(); preparer.setModelService(modelService); attrValidator = new AttributeConstraintValidator(); attrValidator.setModelService(modelService); typeValidator = new TypeConstraintValidator(); typeValidator.setModelService(modelService); prodModCT = new ComposedTypeModel(); prodModCT.setJaloclass(Product.class); prodModCT.setCode("Product"); prodModCodeAD = new AttributeDescriptorModel(); prodModCodeAD.setQualifier("code"); prodModCodeAD.setEnclosingType(prodModCT); }
@Test public void testGetInitialAttributeDescriptorsForType() { final ComposedTypeModel model = mock(ComposedTypeModel.class); final AttributeDescriptorModel attributeDescriptor1 = new AttributeDescriptorModel(); attributeDescriptor1.setInitial(Boolean.TRUE); when(model.getDeclaredattributedescriptors()) .thenReturn(Collections.singletonList(attributeDescriptor1)); final AttributeDescriptorModel attributeDescriptor2 = new AttributeDescriptorModel(); attributeDescriptor2.setInitial(Boolean.FALSE); when(model.getInheritedattributedescriptors()) .thenReturn(Collections.singletonList(attributeDescriptor2)); final Set<AttributeDescriptorModel> attributeDescriptors = typeService.getInitialAttributeDescriptorsForType(model); Assert.assertEquals( "One initial attribute descriptor should be returned, got: " + attributeDescriptors.size(), 1, attributeDescriptors.size()); }
@Test public void testFindMandatoryAttributes() { final AttributeDescriptorModel attributeDescriptor1 = new AttributeDescriptorModel(); attributeDescriptor1.setModifiers(Integer.valueOf(AttributeDescriptor.WRITE_FLAG)); final Set<String> mandatory = new HashSet<String>(); mandatory.add("mandatory1"); final ItemModelConverter modelConverter = mock(ItemModelConverter.class); when(modelConverter.getMandatoryAttributes()).thenReturn(mandatory); when(modelConverter.getMandatoryAttributesForCreation()).thenReturn(Collections.EMPTY_SET); when(converterRegistry.getModelConverterBySourceType("model1")).thenReturn(modelConverter); Set<String> actualMandatory = typeService.getMandatoryAttributes("model1", false); Assert.assertEquals("One attribute expected", 1, actualMandatory.size()); Assert.assertEquals( "Unexpected attribute got", "mandatory1", actualMandatory.iterator().next()); actualMandatory = typeService.getMandatoryAttributes("model1", true); Assert.assertEquals( "Zero attributes expected with force create set", 0, actualMandatory.size()); }
@Test public void testGetAttributesForModiferCriteria() { final AttributeDescriptorModel declaredDescriptor = mock(AttributeDescriptorModel.class); when(declaredDescriptor.getModifiers()).thenReturn(Integer.valueOf(AttributeModifiers.READ)); final AttributeDescriptorModel privateDescriptor = mock(AttributeDescriptorModel.class); when(privateDescriptor.getModifiers()) .thenReturn(Integer.valueOf(AttributeModifiers.READ | AttributeModifiers.PRIVATE)); when(privateDescriptor.getPrivate()).thenReturn(Boolean.TRUE); final AttributeDescriptorModel inheritedDescriptor = mock(AttributeDescriptorModel.class); when(inheritedDescriptor.getModifiers()) .thenReturn(Integer.valueOf(AttributeModifiers.READ | AttributeModifiers.INHERITED)); final AttributeDescriptorModel writableDescriptor = mock(AttributeDescriptorModel.class); when(writableDescriptor.getModifiers()) .thenReturn(Integer.valueOf(AttributeModifiers.READ | AttributeModifiers.WRITE)); when(writableDescriptor.getWritable()).thenReturn(Boolean.TRUE); final AttributeDescriptorModel partofDescriptor = mock(AttributeDescriptorModel.class); when(partofDescriptor.getModifiers()) .thenReturn( Integer.valueOf( AttributeModifiers.READ | AttributeModifiers.PARTOF | AttributeModifiers.WRITE)); when(partofDescriptor.getWritable()).thenReturn(Boolean.TRUE); when(partofDescriptor.getPartOf()).thenReturn(Boolean.TRUE); final Set<AttributeDescriptorModel> declaredDescriptorModels = new HashSet<AttributeDescriptorModel>(); declaredDescriptorModels.add(declaredDescriptor); declaredDescriptorModels.add(writableDescriptor); declaredDescriptorModels.add(partofDescriptor); final Set<AttributeDescriptorModel> inheritedDescriptorModels = new HashSet<AttributeDescriptorModel>(); inheritedDescriptorModels.add(inheritedDescriptor); final ComposedTypeModel typeModel = mock(ComposedTypeModel.class); when((typeModel).getDeclaredattributedescriptors()).thenReturn(declaredDescriptorModels); when((typeModel).getInheritedattributedescriptors()).thenReturn(inheritedDescriptorModels); final PK descriptorPk = PK.fromLong(1234567890); final AttributeDescriptor privateDescriptorItem = mock(AttributeDescriptor.class); when(privateDescriptorItem.getPK()).thenReturn(descriptorPk); when(Boolean.valueOf(privateDescriptorItem.isPrivate())).thenReturn(Boolean.TRUE); final Set<AttributeDescriptor> privateDescriptorItems = new HashSet<AttributeDescriptor>(); privateDescriptorItems.add(privateDescriptorItem); final ComposedType composedType = mock(ComposedType.class); when(modelService.getSource(typeModel)).thenReturn(composedType); when(composedType.getAttributeDescriptorsIncludingPrivate()).thenReturn(privateDescriptorItems); when(modelService.get(privateDescriptorItem)).thenReturn(privateDescriptor); when(typeDao.findComposedTypeByCode("modifierTest")).thenReturn(typeModel); final AttributeModifierCriteria modifierCriteria = new AttributeModifierCriteria(0, AttributeModifiers.ALL, 0); Assert.assertEquals( "Five declared descriptors expected", 5, typeService.getAttributesForModifiers("modifierTest", modifierCriteria).size()); modifierCriteria.addDisallowed(AttributeModifiers.PRIVATE); Assert.assertEquals( "Four declared descriptors expected", 4, typeService.getAttributesForModifiers("modifierTest", modifierCriteria).size()); modifierCriteria.addDisallowed(AttributeModifiers.INHERITED); Assert.assertEquals( "Three declared descriptors expected", 3, typeService.getAttributesForModifiers("modifierTest", modifierCriteria).size()); modifierCriteria.addRequired(AttributeModifiers.WRITE); Assert.assertEquals( "Two declared descriptors expected", 2, typeService.getAttributesForModifiers("modifierTest", modifierCriteria).size()); modifierCriteria.addRequired(AttributeModifiers.PARTOF); Assert.assertEquals( "One declared descriptor expected", 1, typeService.getAttributesForModifiers("modifierTest", modifierCriteria).size()); }