@Test public void testEqualsHashCode() { Person p1 = new Person(); p1.setAge(10); p1.setName("Bob"); p1.setEmail("*****@*****.**"); Person p2 = new Person(); p2.setAge(10); p2.setName("Bob"); p2.setEmail("*****@*****.**"); assertEquals(p1, p2); assertEquals(p1.hashCode(), p2.hashCode()); }
@Test public void testQueryLike() { Person person = randomPerson(); person.setName("Carol"); data.insert(person); person = randomPerson(); person.setName("Bob"); data.insert(person); Person a = data.select(Person.class).where(Person.NAME.like("B%")).get().first(); assertSame(a, person); a = data.select(Person.class).where(Person.NAME.lower().like("b%")).get().first(); assertSame(a, person); Person b = data.select(Person.class).where(Person.NAME.notLike("B%")).get().firstOrNull(); assertTrue(b != person); }
@Test public void testQuerySelectWhereIn() { final String name = "Hello!"; Person person = randomPerson(); person.setName(name); data.insert(person); Group group = new Group(); group.setName("Hello!"); data.insert(group); person.getGroups().add(group); data.update(person); Return<Result<Tuple>> groupNames = data.select(Group.NAME).where(Group.NAME.equal(name)); Person p = data.select(Person.class).where(Person.NAME.in(groupNames)).get().first(); assertEquals(p.getName(), name); p = data.select(Person.class).where(Person.NAME.notIn(groupNames)).get().firstOrNull(); assertNull(p); p = data.select(Person.class) .where(Person.NAME.in(Arrays.asList("Hello!", "Other"))) .get() .first(); assertEquals(p.getName(), name); p = data.select(Person.class) .where(Person.NAME.in(Collections.singleton("Hello!"))) .get() .first(); assertEquals(p.getName(), name); assertTrue( data.select(Person.class) .where(Person.NAME.notIn(Collections.singleton("Hello!"))) .get() .toList() .isEmpty()); }
@Test public void testUpdate() { Person person = randomPerson(); data.insert(person); assertTrue(person.getId() > 0); person.setName("Bob Smith"); Calendar calendar = Calendar.getInstance(); calendar.set(1983, Calendar.NOVEMBER, 11); person.setBirthday(calendar.getTime()); EntityProxy<Person> proxy = Person.$TYPE.proxyProvider().apply(person); int count = 0; for (Property ignored : proxy.filterProperties( new Predicate<Property<Person, ?>>() { @Override public boolean test(Property value) { return value.state() == PropertyState.MODIFIED; } })) { count++; } assertEquals(2, count); data.update(person); for (Property ignored : proxy.filterProperties( new Predicate<Property<Person, ?>>() { @Override public boolean test(Property value) { return value.state() == PropertyState.MODIFIED; } })) { fail(); } }
@Test public void testQuerySelectTrim() { // TODO fix use ltrim/rtrim for SQLServer Person person = randomPerson(); person.setName(" Name "); data.insert(person); Tuple result = data.select(Person.NAME.trim().as("name")).get().first(); String name = result.get(0); assertEquals(name, "Name"); }
@Test public void testQuerySelectDistinct() { for (int i = 0; i < 10; i++) { Person person = randomPerson(); person.setName(String.valueOf(i / 2)); data.insert(person); } try (Result<Tuple> result = data.select(Person.NAME).distinct().get()) { assertEquals(5, result.toList().size()); } }
@Test public void testDeleteAll() { final String name = "someName"; for (int i = 0; i < 10; i++) { Person person = randomPerson(); person.setName(name); data.insert(person); } assertTrue(data.delete(Person.class).get().value() > 0); assertTrue(data.select(Person.class).get().toList().isEmpty()); }
@Test public void testQueryCoalesce() { Person person = randomPerson(); person.setName("Carol"); person.setEmail(null); data.insert(person); person = randomPerson(); person.setName("Bob"); person.setEmail("*****@*****.**"); person.setHomepage(null); data.insert(person); Result<Tuple> result = data.select(Coalesce.coalesce(Person.EMAIL, Person.NAME)).get(); List<Tuple> list = result.toList(); List<String> values = new ArrayList<>(); for (Tuple tuple : list) { values.add(tuple.get(0).toString()); } assertEquals(values.size(), 2); assertTrue(values.contains("Carol")); assertTrue(values.contains("*****@*****.**")); }
@Test public void testQuerySelectCountWhere() { for (int i = 0; i < 10; i++) { Person person = randomPerson(); if (i == 0) { person.setName("countme"); } data.insert(person); } assertEquals( 1, data.count(Person.class).where(Person.NAME.eq("countme")).get().value().intValue()); }
@Test public void testSingleQueryWhereNull() { data.delete(Person.class).where(Person.NAME.isNull()).get(); Person person = randomPerson(); person.setName(null); data.insert(person); try (Result<Person> query = data.select(Person.class).where(Person.NAME.equal(null)).get()) { assertEquals(1, query.toList().size()); } try (Result<Person> query = data.select(Person.class).where(Person.NAME.isNull()).get()) { assertEquals(1, query.toList().size()); } }
@Test public void testSingleQueryWhere() { final String name = "duplicateFirstName"; data.delete(Person.class).where(Person.NAME.equal(name)).get(); for (int i = 0; i < 10; i++) { Person person = randomPerson(); person.setName(name); data.insert(person); } try (Result<Person> query = data.select(Person.class).where(Person.NAME.equal(name)).get()) { assertEquals(10, query.toList().size()); } }
@Test public void testQueryUnion() { Person person = randomPerson(); person.setName("Carol"); data.insert(person); Group group = new Group(); group.setName("Hello!"); data.insert(group); List<Tuple> result = data.select(Person.NAME.as("name")) .union() .select(Group.NAME.as("name")) .orderBy(Group.NAME.as("name")) .get() .toList(); assertTrue(result.size() == 2); assertTrue(result.get(0).get(0).equals("Carol")); assertTrue(result.get(1).get(0).equals("Hello!")); }
@Test public void testQueryCase() { String[] names = new String[] {"Carol", "Bob", "Jack"}; for (String name : names) { Person person = randomPerson(); person.setName(name); data.insert(person); } Result<Tuple> a = data.select( Person.NAME, Case.type(String.class) .when(Person.NAME.equal("Bob"), "B") .when(Person.NAME.equal("Carol"), "C") .elseThen("Unknown")) .from(Person.class) .orderBy(Person.NAME) .get(); List<Tuple> list = a.toList(); assertTrue(list.get(0).get(1).equals("B")); assertTrue(list.get(1).get(1).equals("C")); assertTrue(list.get(2).get(1).equals("Unknown")); a = data.select( Person.NAME, Case.type(Integer.class) .when(Person.NAME.equal("Bob"), 1) .when(Person.NAME.equal("Carol"), 2) .elseThen(0)) .orderBy(Person.NAME) .get(); list = a.toList(); assertTrue(list.get(0).get(1).equals(1)); assertTrue(list.get(1).get(1).equals(2)); assertTrue(list.get(2).get(1).equals(0)); }