package org.tests.text.json;
import io.ebean.BaseTestCase;
import io.ebean.Ebean;
import io.ebean.EbeanServer;
import io.ebean.text.json.JsonContext;
import org.tests.model.basic.Customer;
import org.tests.model.basic.MRole;
import org.tests.model.basic.MUser;
import org.tests.model.basic.Order;
import org.tests.model.basic.Order.Status;
import org.tests.model.basic.OrderDetail;
import org.tests.model.basic.Product;
import org.tests.model.basic.ResetBasicData;
import org.junit.Assert;
import org.junit.Test;
import java.io.IOException;
import java.util.List;
public class TestTextJsonUpdateCascade extends BaseTestCase {
@Test
public void test() throws IOException {
ResetBasicData.reset();
Customer c0 = ResetBasicData.createCustAndOrder("Test Json");
Customer c2 = Ebean.getReference(Customer.class, c0.getId());
List<Order> orders = c2.getOrders();
Assert.assertEquals(1, orders.size());
Order order = orders.get(0);
int size = order.getDetails().size();
Assert.assertTrue(size >= 3);
Customer cref = Ebean.getReference(Customer.class, c0.getId());
order.setCustomer(cref);
order.setStatus(Status.SHIPPED);
OrderDetail orderDetail0 = order.getDetails().get(0);
orderDetail0.setShipQty(300);
orderDetail0.setUnitPrice(56.98d);
// remove one of the details...
OrderDetail removedDetail = order.getDetails().remove(2);
Assert.assertNotNull(removedDetail);
Product p = Ebean.getReference(Product.class, 1);
OrderDetail newDetail = new OrderDetail(p, 899, 12.12d);
// newDetail.setOrder(order);
order.addDetail(newDetail);
EbeanServer server = Ebean.getServer(null);
JsonContext jsonContext = server.json();
String jsonString = jsonContext.toJson(order);
Order updOrder = jsonContext.toBean(Order.class, jsonString);
server.update(updOrder);
MRole r1 = new MRole();
r1.setRoleName("rolej1");
Ebean.save(r1);
MRole r2 = new MRole();
r2.setRoleName("rolej2");
Ebean.save(r2);
MRole r3 = new MRole();
r3.setRoleName("rolej3");
Ebean.save(r3);
MUser u0 = new MUser();
u0.setUserName("userj1");
u0.addRole(r1);
u0.addRole(r2);
u0.addRole(r3);
Ebean.save(u0);
jsonContext.toJson(u0);
String s = "{\"userid\":" + u0.getUserid()
+ ",\"userName\":\"userj1\", \"roles\":[{\"roleid\":" + r2.getRoleid() + "},{\"roleid\":"
+ r3.getRoleid() + "}]} ";
MUser updMUser = jsonContext.toBean(MUser.class, s);
server.update(updMUser);
// checked transaction log to confirm correct behaviour
}
}