package org.jooby.internal.couchbase;
import static org.junit.Assert.assertEquals;
import org.jooby.couchbase.GeneratedValue;
import org.junit.Test;
import com.couchbase.client.java.repository.annotation.Id;
public class IdGeneratorTest {
public static class Base {
String id;
}
public static class Sub extends Base {
}
@Test
public void getId() {
new IdGenerator();
assertEquals("id1", IdGenerator.getId(new Object() {
private String id = "id1";
@Override
public String toString() {
return id;
}
}));
assertEquals(1L, IdGenerator.getId(new Object() {
@Id
private Long beerId = 1L;
}));
}
@Test
public void getIdName() {
assertEquals("id", IdGenerator.getIdName(new Object() {
private String id = "id1";
@Override
public String toString() {
return id;
}
}));
assertEquals("beerId", IdGenerator.getIdName(new Object() {
@Id
private Long beerId = 1L;
}));
}
@Test
public void idFromSuper() {
assertEquals("id", IdGenerator.getIdName(new Sub()));
}
@Test
public void getOrGen() {
assertEquals(null, IdGenerator.getOrGenId(new Object() {
private String id;
@Override
public String toString() {
return id;
}
}, () -> 7L));
assertEquals("id1", IdGenerator.getOrGenId(new Object() {
private String id = "id1";
@Override
public String toString() {
return id;
}
}, () -> 7L));
assertEquals(3L, IdGenerator.getOrGenId(new Object() {
private Long id = 3L;
@Override
public String toString() {
return id.toString();
}
}, () -> 7L));
assertEquals(7L, IdGenerator.getOrGenId(new Object() {
@GeneratedValue
private Long id;
@Override
public String toString() {
return id.toString();
}
}, () -> 7L));
}
@Test
public void generatedValue() {
Object entity = new Object() {
@GeneratedValue
private Long id;
@Override
public String toString() {
return id.toString();
}
};
assertEquals(null, IdGenerator.getId(entity));
assertEquals(7L, IdGenerator.getOrGenId(entity, () -> 7L));
assertEquals(7L, IdGenerator.getId(entity));
}
@Test(expected = IllegalArgumentException.class)
public void generatedValueMustBeLong() {
IdGenerator.getOrGenId(new Object() {
@GeneratedValue
private Integer id;
@Override
public String toString() {
return id.toString();
}
}, () -> 7L);
}
@Test(expected = IllegalArgumentException.class)
public void noId() {
IdGenerator.getOrGenId(new Object(), () -> 7L);
}
@Test(expected = IllegalArgumentException.class)
public void noId2() {
IdGenerator.getOrGenId(new Object() {
@SuppressWarnings("unused")
String foo;
}, () -> 7L);
}
@Test(expected = IllegalStateException.class)
public void errorWhileGeneratingValue() {
IdGenerator.getOrGenId(new Object() {
@GeneratedValue
private Long id;
@Override
public String toString() {
return id.toString();
}
}, () -> {
throw new IllegalStateException("intentional errr");
});
}
}