package com.orm.androrm.test.field;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import android.test.AndroidTestCase;
import com.orm.androrm.DatabaseAdapter;
import com.orm.androrm.Model;
import com.orm.androrm.QuerySet;
import com.orm.androrm.field.ForeignKeyField;
import com.orm.androrm.field.ManyToManyField;
import com.orm.androrm.impl.Branch;
import com.orm.androrm.impl.Brand;
import com.orm.androrm.impl.Product;
import com.orm.androrm.impl.Supplier;
public class ManyToManyFieldTest extends AndroidTestCase {
@Override
public void setUp() {
List<Class<? extends Model>> models = new ArrayList<Class<? extends Model>>();
models.add(Product.class);
models.add(Supplier.class);
models.add(Branch.class);
models.add(Brand.class);
DatabaseAdapter adapter = DatabaseAdapter.getInstance(getContext());
adapter.setModels(models);
}
public void testRelationTableName() {
ManyToManyField<Supplier, Product> m = new ManyToManyField<Supplier, Product>(Supplier.class, Product.class);
// table name should be lexical ordering of involved model tables
String tableName = "product_supplier";
assertEquals(tableName, m.getRelationTableName());
}
public void testGetTarget() {
ManyToManyField<Supplier, Product> m = new ManyToManyField<Supplier, Product>(Supplier.class, Product.class);
assertEquals(Product.class, m.getTarget());
}
public void testGetFieldDescriptors() {
ForeignKeyField<Supplier> left = new ForeignKeyField<Supplier>(Supplier.class);
ForeignKeyField<Product> right = new ForeignKeyField<Product>(Product.class);
ManyToManyField<Supplier, Product> m = new ManyToManyField<Supplier, Product>(Supplier.class, Product.class);
assertEquals(left.getDefinition("foo"), m.getLeftLinkDescriptor().getDefinition("foo"));
assertEquals(left.getConstraint("foo"), m.getLeftLinkDescriptor().getConstraint("foo"));
assertEquals(right.getDefinition("foo"), m.getRightHandDescriptor().getDefinition("foo"));
assertEquals(right.getConstraint("foo"), m.getRightHandDescriptor().getConstraint("foo"));
}
public void testAddAndGet() {
Product p1 = new Product();
p1.setName("test1");
p1.save(getContext());
Product p2 = new Product();
p2.setName("test2");
p2.save(getContext());
Brand b = new Brand();
b.setName("Copcal");
b.save(getContext());
Supplier s = new Supplier();
s.setName("ACME");
s.setBrand(b);
s.addProduct(p1);
s.addProduct(p2);
s.save(getContext());
s = Supplier.objects(getContext()).get(s.getId());
QuerySet<Product> products = s.getProducts(getContext());
assertEquals(2, products.count());
assertTrue(products.contains(p1));
assertTrue(products.contains(p2));
}
public void testAddAllAndGet() {
Product p1 = new Product();
p1.setName("test1");
p1.save(getContext());
Product p2 = new Product();
p2.setName("test2");
p2.save(getContext());
Brand b = new Brand();
b.setName("Copcal");
b.save(getContext());
Supplier s = new Supplier();
s.setName("ACME");
s.setBrand(b);
s.addProducts(Arrays.asList(new Product[] { p1, p2 }));
s.save(getContext());
s = Supplier.objects(getContext()).get(s.getId());
QuerySet<Product> products = s.getProducts(getContext());
assertEquals(2, products.count());
assertTrue(products.contains(p1));
assertTrue(products.contains(p2));
}
public void testCount() {
Product p1 = new Product();
p1.setName("test1");
p1.save(getContext());
Product p2 = new Product();
p2.setName("test2");
p2.save(getContext());
Brand b = new Brand();
b.setName("Copcal");
b.save(getContext());
Supplier s = new Supplier();
s.setName("ACME");
s.setBrand(b);
s.addProducts(Arrays.asList(new Product[] { p1, p2 }));
assertEquals(0, s.productCount(getContext()));
s.save(getContext());
s = Supplier.objects(getContext()).get(s.getId());
assertEquals(2, s.productCount(getContext()));
}
public void testSet() {
Product p = new Product();
p.setName("test product");
p.save(getContext());
Brand b = new Brand();
b.setName("Copcal");
b.save(getContext());
Branch b1 = new Branch();
b1.setName("test branch");
b1.setBrand(b);
b1.addProduct(p);
b1.addProduct(p);
b1.save(getContext());
Branch b2 = Model.objects(getContext(), Branch.class).get(b1.getId());
assertEquals(1, b2.getProducts(getContext()).count());
assertTrue(b2.getProducts(getContext()).contains(p));
}
public void testReset() {
Product p1 = new Product();
p1.setName("test1");
p1.save(getContext());
Product p2 = new Product();
p2.setName("test2");
p2.save(getContext());
Brand b = new Brand();
b.setName("Copcal");
b.save(getContext());
Supplier s = new Supplier();
s.setName("ACME");
s.setBrand(b);
s.addProducts(Arrays.asList(new Product[] { p1, p2 }));
s.save(getContext());
assertEquals(2, s.getProducts(getContext()).count());
s.delete(getContext());
assertEquals(0, s.getProducts(getContext()).count());
}
@Override
public void tearDown() {
DatabaseAdapter adapter = DatabaseAdapter.getInstance(getContext());
adapter.drop();
}
}