private Library createTestDataInstance() { final LibraryModelFactory factory = LibraryModelPackage.MODELFACTORY; final int COUNT = 5; // create testdata final Library lib = factory.createLibrary(); lib.setName("name"); // $NON-NLS-1$ for (int w = 0; w < COUNT; w++) { final Writer writer = factory.createWriter(); lib.getWriters().add(writer); for (int b = 0; b < COUNT; b++) { final Book bk = factory.createBook(); bk.setAuthor(writer); writer.getBooks().add(bk); lib.getBooks().add(bk); } } return lib; }
@Test public void insertComplexStructureTest() throws Exception { Library lib = null; { final String content = serialize(createTestDataInstance()); final String resultStr = doContentRequest( ModelUtils.getQualifiedNameFromEClass(LibraryModelPackage.INSTANCE.getWriterEClass()), content, HttpServletResponse.SC_OK, null, HttpMethod.POST); final ResultType result = (ResultType) deserialize(resultStr).get(0); lib = (Library) result.getInserted().get(0); Assert.assertTrue(lib.getDb_Id() != null); for (Book bk : lib.getBooks()) { Assert.assertTrue(bk.getDb_Id() != null); checkExists(bk, true); } for (Writer w : lib.getWriters()) { Assert.assertTrue(w.getDb_Id() != null); checkExists(w, true); } } // remove all books Writer w = lib.getWriters().get(0); final String newName = "" + System.currentTimeMillis(); // $NON-NLS-1$ w.setName(newName); final Book bk = w.getBooks().get(0); w.getBooks().clear(); { final String content = serialize(w); final String resultStr = doContentRequest( ModelUtils.getQualifiedNameFromEClass(LibraryModelPackage.INSTANCE.getWriterEClass()), content, HttpServletResponse.SC_OK, null, HttpMethod.POST); final ResultType resultType = (ResultType) deserialize(resultStr).get(0); final Writer wResult = (Writer) resultType.getUpdated().get(0); Assert.assertNotSame(w, wResult); Assert.assertEquals(w.getDb_Id(), wResult.getDb_Id()); Assert.assertEquals(0, wResult.getBooks().size()); // use the new writer as the version may have changed w = wResult; checkExists(w, true); } { final String content = doGetRequest( ModelUtils.getQualifiedNameFromEClass(LibraryModelPackage.INSTANCE.getWriterEClass()), null, HttpServletResponse.SC_OK); final List<Object> objects = deserialize(content); System.err.println(objects.size()); } // and add one book again { w.getBooks().add(bk); bk.setAuthor(w); final String content = serialize(w); final String resultStr = doContentRequest( ModelUtils.getQualifiedNameFromEClass(LibraryModelPackage.INSTANCE.getWriterEClass()), content, HttpServletResponse.SC_OK, null, HttpMethod.POST); final ResultType resultType = (ResultType) deserialize(resultStr).get(0); final Writer wResult = (Writer) resultType.getUpdated().get(0); Assert.assertNotSame(w, wResult); Assert.assertEquals(w.getDb_Id(), wResult.getDb_Id()); Assert.assertEquals(1, wResult.getBooks().size()); // disabled test as books of a writer are proxied // Assert.assertEquals(wResult.getBooks().get(0).getAuthor(), wResult); } { final Writer w2 = (Writer) deserialize(getOneObject(w)).get(0); Assert.assertNotSame(w, w2); Assert.assertEquals(newName, w2.getName()); Assert.assertEquals(w.getDb_Id(), w2.getDb_Id()); Assert.assertEquals(1, w2.getBooks().size()); Assert.assertEquals(bk.getDb_Id(), w2.getBooks().get(0).getDb_Id()); } }