Add more tests to check that relationships are persisted correctly.
Patch by: cromwellian, amitmanjhi
Review by: rjrjr (desk review)
git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@8607 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/test/com/google/gwt/valuestore/client/RequestFactoryTest.java b/user/test/com/google/gwt/valuestore/client/RequestFactoryTest.java
index 651a46a..3ac6136 100644
--- a/user/test/com/google/gwt/valuestore/client/RequestFactoryTest.java
+++ b/user/test/com/google/gwt/valuestore/client/RequestFactoryTest.java
@@ -33,11 +33,182 @@
*/
public class RequestFactoryTest extends GWTTestCase {
+ /*
+ * TODO: all these tests should check the final values. It will be easy when
+ * we have better persistence than the singleton pattern.
+ */
+ public void testPersistExistingEntityExistingRelation() {
+ final SimpleRequestFactory req = GWT.create(SimpleRequestFactory.class);
+ HandlerManager hm = new HandlerManager(null);
+ req.init(hm);
+ delayTestFinish(5000);
+
+ req.simpleBarRequest().findSimpleBarById(999L).fire(
+ new Receiver<SimpleBarRecord>() {
+ public void onSuccess(final SimpleBarRecord barRecord,
+ Set<SyncResult> syncResults) {
+ req.simpleFooRequest().findSimpleFooById(999L).fire(
+ new Receiver<SimpleFooRecord>() {
+ public void onSuccess(SimpleFooRecord fooRecord,
+ Set<SyncResult> syncResults) {
+ RequestObject<Void> updReq = req.simpleFooRequest().persist(
+ fooRecord);
+ fooRecord = updReq.edit(fooRecord);
+ fooRecord.setBarField(barRecord);
+ updReq.fire(new Receiver<Void>() {
+ public void onSuccess(Void response,
+ Set<SyncResult> syncResults) {
+ finishTest();
+ }
+ });
+ }
+ });
+ }
+ });
+ }
+
+ /*
+ * Find Entity Create Entity2 Relate Entity2 to Entity Persist Entity
+ */
+ public void testPersistExistingEntityNewRelation() {
+ final SimpleRequestFactory req = GWT.create(SimpleRequestFactory.class);
+ HandlerManager hm = new HandlerManager(null);
+ req.init(hm);
+ delayTestFinish(5000);
+
+ SimpleBarRecord newBar = (SimpleBarRecord) req.create(SimpleBarRecord.class);
+
+ final RequestObject<Void> barReq = req.simpleBarRequest().persist(newBar);
+ newBar = barReq.edit(newBar);
+ newBar.setUserName("Amit");
+
+ final SimpleBarRecord finalNewBar = newBar;
+ req.simpleFooRequest().findSimpleFooById(999L).fire(
+ new Receiver<SimpleFooRecord>() {
+ public void onSuccess(SimpleFooRecord response,
+ Set<SyncResult> syncResults) {
+ RequestObject<Void> fooReq = req.simpleFooRequest().persist(
+ response);
+ response = fooReq.edit(response);
+ response.setBarField(finalNewBar);
+ fooReq.fire(new Receiver<Void>() {
+ public void onSuccess(Void response, Set<SyncResult> syncResults) {
+ req.simpleFooRequest().findSimpleFooById(999L).with(
+ "barField.userName").fire(new Receiver<SimpleFooRecord>() {
+ public void onSuccess(SimpleFooRecord finalFooRecord,
+ Set<SyncResult> syncResults) {
+ // barReq hasn't been persisted, so old value
+ assertEquals("FOO",
+ finalFooRecord.getBarField().getUserName());
+ finishTest();
+ }
+
+ });
+ }
+ });
+ }
+ });
+ }
+
+ /*
+ * Find Entity2 Create Entity, Persist Entity Relate Entity2 to Entity Persist
+ * Entity
+ */
+ public void testPersistNewEntityExistingRelation() {
+ final SimpleRequestFactory req = GWT.create(SimpleRequestFactory.class);
+ HandlerManager hm = new HandlerManager(null);
+ req.init(hm);
+ delayTestFinish(5000);
+ SimpleFooRecord newFoo = (SimpleFooRecord) req.create(SimpleFooRecord.class);
+
+ final RequestObject<Void> fooReq = req.simpleFooRequest().persist(newFoo);
+
+ newFoo = fooReq.edit(newFoo);
+ newFoo.setUserName("Ray");
+
+ final SimpleFooRecord finalFoo = newFoo;
+ req.simpleBarRequest().findSimpleBarById(999L).fire(
+ new Receiver<SimpleBarRecord>() {
+ public void onSuccess(SimpleBarRecord response,
+ Set<SyncResult> syncResults) {
+ finalFoo.setBarField(response);
+ fooReq.fire(new Receiver<Void>() {
+ public void onSuccess(Void response, Set<SyncResult> syncResults) {
+ req.simpleFooRequest().findSimpleFooById(999L).fire(
+ new Receiver<SimpleFooRecord>() {
+ public void onSuccess(SimpleFooRecord finalFooRecord,
+ Set<SyncResult> syncResults) {
+ // newFoo hasn't been persisted, so userName is the old value.
+ assertEquals("GWT", finalFooRecord.getUserName());
+ finishTest();
+ }
+
+ });
+ }
+ });
+ }
+ });
+ }
+
+ /*
+ * Create Entity, Persist Entity Create Entity2, Perist Entity2 relate Entity2
+ * to Entity Persist
+ */
+ public void testPersistNewEntityNewRelation() {
+ final SimpleRequestFactory req = GWT.create(SimpleRequestFactory.class);
+ HandlerManager hm = new HandlerManager(null);
+ req.init(hm);
+ delayTestFinish(5000);
+ SimpleFooRecord newFoo = (SimpleFooRecord) req.create(SimpleFooRecord.class);
+ SimpleBarRecord newBar = (SimpleBarRecord) req.create(SimpleBarRecord.class);
+
+ final RequestObject<SimpleFooRecord> fooReq = req.simpleFooRequest().persistAndReturnSelf(
+ newFoo);
+
+ newFoo = fooReq.edit(newFoo);
+ newFoo.setUserName("Ray");
+
+ final RequestObject<SimpleBarRecord> barReq = req.simpleBarRequest().persistAndReturnSelf(
+ newBar);
+ newBar = barReq.edit(newBar);
+ newBar.setUserName("Amit");
+
+ fooReq.fire(new Receiver<SimpleFooRecord>() {
+ public void onSuccess(final SimpleFooRecord persistedFoo,
+ Set<SyncResult> syncResult) {
+ barReq.fire(new Receiver<SimpleBarRecord>() {
+ public void onSuccess(final SimpleBarRecord persistedBar,
+ Set<SyncResult> syncResults) {
+ assertEquals("Ray", persistedFoo.getUserName());
+ final RequestObject<Void> fooReq2 = req.simpleFooRequest().persist(
+ persistedFoo);
+ SimpleFooRecord editablePersistedFoo = fooReq2.edit(persistedFoo);
+ editablePersistedFoo.setBarField(persistedBar);
+ fooReq2.fire(new Receiver<Void>() {
+ public void onSuccess(Void response, Set<SyncResult> syncResults) {
+ req.simpleFooRequest().findSimpleFooById(999L).with(
+ "barField.userName").fire(new Receiver<SimpleFooRecord>() {
+ public void onSuccess(SimpleFooRecord finalFooRecord,
+ Set<SyncResult> syncResults) {
+ assertEquals("Amit",
+ finalFooRecord.getBarField().getUserName());
+ finishTest();
+ }
+
+ });
+ }
+ });
+ }
+ });
+ }
+ });
+ }
+
public void testPersistRelation() {
final SimpleRequestFactory req = GWT.create(SimpleRequestFactory.class);
HandlerManager hm = new HandlerManager(null);
req.init(hm);
- delayTestFinish(500000);
+ delayTestFinish(5000);
SimpleFooRecord rayFoo = req.create(SimpleFooRecord.class);
final RequestObject<SimpleFooRecord> persistRay = req.simpleFooRequest().persistAndReturnSelf(
diff --git a/user/test/com/google/gwt/valuestore/shared/SimpleBarRequest.java b/user/test/com/google/gwt/valuestore/shared/SimpleBarRequest.java
index 1b2bccd..4839ce8 100644
--- a/user/test/com/google/gwt/valuestore/shared/SimpleBarRequest.java
+++ b/user/test/com/google/gwt/valuestore/shared/SimpleBarRequest.java
@@ -16,6 +16,7 @@
package com.google.gwt.valuestore.shared;
import com.google.gwt.requestfactory.shared.Instance;
+import com.google.gwt.requestfactory.shared.RecordListRequest;
import com.google.gwt.requestfactory.shared.RecordRequest;
import com.google.gwt.requestfactory.shared.RequestObject;
import com.google.gwt.requestfactory.shared.Service;
@@ -26,9 +27,15 @@
@Service(com.google.gwt.valuestore.server.SimpleBar.class)
public interface SimpleBarRequest {
+ RequestObject<Long> countSimpleBar();
+
+ RecordListRequest<SimpleBarRecord> findAll();
+
+ RecordRequest<SimpleBarRecord> findSimpleBarById(Long id);
+
@Instance
RequestObject<Void> persist(SimpleBarRecord record);
-
+
@Instance
RecordRequest<SimpleBarRecord> persistAndReturnSelf(SimpleBarRecord record);
}