private void testUpdateCreate(boolean edit) throws ClassNotFoundException { final DateTime dtValue = DateUtil.now(); mockSampleFields(); mockDataService(); mockEntity(); when(motechDataService.retrieve("id", INSTANCE_ID)).thenReturn(new TestSample()); List<FieldRecord> fieldRecords = asList( FieldTestHelper.fieldRecord("strField", String.class.getName(), "", "this is a test"), FieldTestHelper.fieldRecord("intField", Integer.class.getName(), "", 16), FieldTestHelper.fieldRecord("timeField", Time.class.getName(), "", "10:17"), FieldTestHelper.fieldRecord("dtField", DateTime.class.getName(), "", dtValue)); Long id = (edit) ? INSTANCE_ID : null; EntityRecord record = new EntityRecord(id, ENTITY_ID, fieldRecords); MDSClassLoader.getInstance().loadClass(TestSample.class.getName()); instanceService.saveInstance(record); ArgumentCaptor<TestSample> captor = ArgumentCaptor.forClass(TestSample.class); if (edit) { verify(motechDataService).update(captor.capture()); } else { verify(motechDataService).create(captor.capture()); } TestSample sample = captor.getValue(); assertEquals("this is a test", sample.getStrField()); assertEquals(Integer.valueOf(16), sample.getIntField()); assertEquals(new Time(10, 17), sample.getTimeField()); assertEquals(dtValue, sample.getDtField()); }
@Test public void shouldCreateInstanceOfSubclassedEntityWithRelation() { mockEntity(SubclassSample.class, ENTITY_ID, entity); mockDataService(SubclassSample.class, motechDataService); when(motechDataService.retrieve("id", INSTANCE_ID)).thenReturn(new SubclassSample()); when(entityService.getEntityFieldsForUI(ENTITY_ID)) .thenReturn( asList( FieldTestHelper.fieldDto( 1L, "superclassInteger", Integer.class.getName(), "Superclass Integer", 7), FieldTestHelper.fieldDto( 2L, "subclassString", String.class.getName(), "Subclass String", "test"), FieldTestHelper.fieldDto( 3L, "superclassRelation", TypeDto.ONE_TO_ONE_RELATIONSHIP.getTypeClass(), "Superclass Relationship", null))); long relationEntityId = ANOTHER_ENTITY_ID; long relationInstanceId = INSTANCE_ID + 1; EntityDto relationEntity = mock(EntityDto.class); MotechDataService relationDataService = mock(MotechDataService.class); mockEntity(TestSample.class, relationEntityId, relationEntity); mockDataService(TestSample.class, relationDataService); TestSample relatedInstance = new TestSample("test sample", 42); when(relationDataService.retrieve("id", relationInstanceId)).thenReturn(relatedInstance); when(relationDataService.findById(relationInstanceId)).thenReturn(relatedInstance); RelationshipsUpdate relationshipsUpdate = new RelationshipsUpdate(); relationshipsUpdate.getAddedIds().add(relationInstanceId); EntityRecord createRecord = new EntityRecord( null, ENTITY_ID, asList( FieldTestHelper.fieldRecord("superclassInteger", Integer.class.getName(), "", 77), FieldTestHelper.fieldRecord( "subclassString", String.class.getName(), "", "test test"), FieldTestHelper.fieldRecord( TypeDto.ONE_TO_ONE_RELATIONSHIP, "superclassRelation", "", relationshipsUpdate))); ArgumentCaptor<SubclassSample> createCaptor = ArgumentCaptor.forClass(SubclassSample.class); instanceService.saveInstance(createRecord); verify(motechDataService).create(createCaptor.capture()); SubclassSample instance = createCaptor.getValue(); assertEquals(77, (int) instance.getSuperclassInteger()); assertEquals("test test", instance.getSubclassString()); assertNotNull(instance.getSuperclassRelation()); assertEquals(relatedInstance.getStrField(), instance.getSuperclassRelation().getStrField()); assertEquals(relatedInstance.getIntField(), instance.getSuperclassRelation().getIntField()); }