|
8 | 8 | package org.seedstack.mongodb.morphia; |
9 | 9 |
|
10 | 10 | import com.google.inject.Inject; |
11 | | -import com.google.inject.Injector; |
12 | | -import com.google.inject.Key; |
13 | | -import com.google.inject.ProvisionException; |
14 | | -import com.google.inject.TypeLiteral; |
15 | | -import com.google.inject.util.Types; |
| 11 | +import org.junit.Before; |
16 | 12 | import org.junit.Test; |
17 | | -import org.mongodb.morphia.mapping.MappingException; |
18 | | -import org.mongodb.morphia.query.UpdateException; |
| 13 | +import org.seedstack.business.domain.AggregateNotFoundException; |
19 | 14 | import org.seedstack.business.domain.Repository; |
20 | | -import org.seedstack.mongodb.morphia.fixtures.dummyobject.Dummy1; |
21 | | -import org.seedstack.mongodb.morphia.fixtures.dummyobject.Dummy2; |
22 | | -import org.seedstack.mongodb.morphia.fixtures.dummyobject.Dummy3; |
23 | | -import org.seedstack.mongodb.morphia.fixtures.dummyobject.Dummy4; |
24 | | -import org.seedstack.mongodb.morphia.fixtures.dummyobject.Dummy5; |
25 | | -import org.seedstack.mongodb.morphia.fixtures.dummyobject.Dummy6; |
26 | 15 | import org.seedstack.mongodb.morphia.fixtures.user.Address; |
27 | | -import org.seedstack.mongodb.morphia.fixtures.user.EntityStringId; |
28 | 16 | import org.seedstack.mongodb.morphia.fixtures.user.User; |
29 | | -import org.seedstack.mongodb.morphia.internal.MorphiaErrorCode; |
30 | | -import org.seedstack.seed.SeedException; |
31 | 17 | import org.seedstack.seed.it.AbstractSeedIT; |
32 | 18 |
|
| 19 | +import java.util.Optional; |
| 20 | + |
33 | 21 | import static org.assertj.core.api.Assertions.assertThat; |
34 | 22 | import static org.assertj.core.api.Assertions.fail; |
35 | 23 |
|
36 | 24 | public class MorphiaRepositoryIT extends AbstractSeedIT { |
37 | | - |
38 | 25 | @Inject |
39 | 26 | @Morphia |
40 | 27 | private Repository<User, Long> userRepository; |
41 | 28 |
|
42 | | - @Inject |
43 | | - @Morphia |
44 | | - private Repository<EntityStringId, String> entityStringIdRepository; |
45 | | - |
46 | | - @Inject |
47 | | - private Injector injector; |
48 | | - |
49 | | - @Test |
50 | | - public void repository_injection_test_no_client_for_aggregate() { |
51 | | - try { |
52 | | - injector.getInstance(getMorphiaRepositoryOf(Dummy1.class)); |
53 | | - } catch (ProvisionException e) { |
54 | | - assertThat(e.getCause().getMessage()) |
55 | | - .isEqualTo(SeedException.createNew(MorphiaErrorCode.CLIENT_NAME_NOT_CONFIGURED).getMessage()); |
56 | | - } |
57 | | - } |
58 | | - |
59 | | - private Key<?> getMorphiaRepositoryOf(Class entity) { |
60 | | - return Key.get(TypeLiteral.get(Types.newParameterizedType(Repository.class, entity, Long.class)), Morphia.class); |
61 | | - } |
62 | | - |
63 | | - @Test |
64 | | - public void repository_injection_test_no_dbName_for_aggregate() { |
65 | | - try { |
66 | | - injector.getInstance(getMorphiaRepositoryOf(Dummy2.class)); |
67 | | - } catch (ProvisionException e) { |
68 | | - assertThat(e.getCause().getMessage()) |
69 | | - .isEqualTo(SeedException.createNew(MorphiaErrorCode.UNKNOWN_DATABASE).getMessage()); |
70 | | - } |
71 | | - } |
72 | | - |
73 | | - @Test |
74 | | - public void repository_injection_test_no_mongoDb_client() { |
75 | | - try { |
76 | | - injector.getInstance(getMorphiaRepositoryOf(Dummy3.class)); |
77 | | - } catch (ProvisionException e) { |
78 | | - assertThat(e.getCause().getMessage()) |
79 | | - .isEqualTo(SeedException.createNew(MorphiaErrorCode.UNKNOWN_CLIENT).getMessage()); |
80 | | - } |
81 | | - } |
82 | | - |
83 | | - @Test |
84 | | - public void repository_injection_test_no_mongoDb_database() { |
85 | | - try { |
86 | | - injector.getInstance(getMorphiaRepositoryOf(Dummy4.class)); |
87 | | - } catch (ProvisionException e) { |
88 | | - assertThat(e.getCause().getMessage()) |
89 | | - .isEqualTo(SeedException.createNew(MorphiaErrorCode.UNKNOWN_DATABASE).getMessage()); |
90 | | - } |
91 | | - } |
92 | | - |
93 | | - @Test |
94 | | - public void repository_injection_test_no_mongodb_for_aggregate() { |
95 | | - try { |
96 | | - injector.getInstance(getMorphiaRepositoryOf(Dummy5.class)); |
97 | | - } catch (ProvisionException e) { |
98 | | - assertThat(e.getCause().getMessage()) |
99 | | - .isEqualTo(SeedException.createNew(MorphiaErrorCode.PERSISTED_CLASS_NOT_CONFIGURED).getMessage()); |
100 | | - } |
| 29 | + @Before |
| 30 | + public void setUp() throws Exception { |
| 31 | + userRepository.clear(); |
101 | 32 | } |
102 | 33 |
|
103 | 34 | @Test |
104 | | - public void repository_injection_async_client() { |
105 | | - try { |
106 | | - injector.getInstance(getMorphiaRepositoryOf(Dummy6.class)); |
107 | | - } catch (ProvisionException e) { |
108 | | - assertThat(e.getCause().getMessage()) |
109 | | - .isEqualTo(SeedException.createNew(MorphiaErrorCode.ASYNC_CLIENT_NOT_SUPPORTED).getMessage()); |
110 | | - } |
| 35 | + public void addAndGet() throws Exception { |
| 36 | + User user1 = createUser(1L, "someFirstName", "someLastName"); |
| 37 | + userRepository.add(user1); |
| 38 | + Optional<User> loaded = userRepository.get(1L); |
| 39 | + assertThat(loaded).isPresent(); |
| 40 | + assertThat(loaded.get().getName()).isEqualTo("someFirstName"); |
| 41 | + assertThat(loaded.get().getLastname()).isEqualTo("someLastName"); |
111 | 42 | } |
112 | 43 |
|
113 | | - |
114 | 44 | @Test |
115 | | - public void mongodb_repository_test() { |
116 | | - assertThat(userRepository).isNotNull(); |
117 | | - User user1 = getUser(1L, "N°", "1"); |
118 | | - userRepository.persist(user1); |
119 | | - User user2 = userRepository.load(user1.getEntityId()); |
120 | | - assertThat(user1.getId()).isEqualTo(user2.getId()); |
121 | | - assertThat(user1.getEntityId()).isEqualTo(user2.getEntityId()); |
122 | | - userRepository.delete(user1); |
123 | | - User user3 = userRepository.load(user1.getEntityId()); |
124 | | - assertThat(user3).isEqualTo(null); |
125 | | - User user5 = getUser(2L, "N°", "2"); |
126 | | - userRepository.delete(user5); |
127 | | - userRepository.persist(user5); |
128 | | - User user6 = userRepository.load(user5.getEntityId()); |
129 | | - assertThat(user6.getId()).isEqualTo(user5.getId()); |
130 | | - userRepository.delete(user5); |
131 | | - user6 = userRepository.load(user5.getEntityId()); |
132 | | - assertThat(user6).isEqualTo(null); |
133 | | - userRepository.persist(user5); |
134 | | - assertThat(userRepository.load(2L)).isNotEqualTo(null); |
135 | | - } |
136 | | - |
137 | | - @Test(expected = MappingException.class) |
138 | | - public void mongodb_repository_save_without_id() { |
139 | | - EntityStringId saved = entityStringIdRepository.save(new EntityStringId(null)); |
140 | | - fail("should not have saved"); |
141 | | - } |
142 | | - |
143 | | - @Test(expected = UpdateException.class) |
144 | | - public void mongodb_repository_save_with_inexistent_id() { |
145 | | - userRepository.save(getUser(100L, "Robert", "SMITH")); |
146 | | - fail("should not have saved"); |
| 45 | + public void addRemoveAndGet() throws Exception { |
| 46 | + User user1 = createUser(1L, "someFirstName", "someLastName"); |
| 47 | + userRepository.add(user1); |
| 48 | + assertThat(userRepository.get(1L)).isPresent(); |
| 49 | + userRepository.remove(user1); |
| 50 | + assertThat(userRepository.get(1L)).isNotPresent(); |
147 | 51 | } |
148 | 52 |
|
149 | 53 | @Test |
150 | | - public void mongodb_repository_save() { |
151 | | - userRepository.persist(getUser(200L, "Robert", "SMITH")); |
152 | | - assertThat(userRepository.save(getUser(200L, "Jane", "SMITH")).getEntityId()).isEqualTo(200L); |
| 54 | + public void update() { |
| 55 | + userRepository.add(createUser(200L, "Robert", "SMITH")); |
| 56 | + userRepository.update(createUser(200L, "Jane", "SMITH")); |
| 57 | + assertThat(userRepository.get(200L).get().getName()).isEqualTo("Jane"); |
153 | 58 | } |
154 | 59 |
|
155 | | - @Test |
156 | | - public void mongodb_repository_persist_load() { |
157 | | - userRepository.persist(getUser(300L, "Robert", "SMITH")); |
158 | | - assertThat(userRepository.load(300L).getEntityId()).isEqualTo(300L); |
| 60 | + @Test(expected = AggregateNotFoundException.class) |
| 61 | + public void updateNonExistent() { |
| 62 | + userRepository.update(createUser(100L, "Robert", "SMITH")); |
| 63 | + fail("should not have updated"); |
159 | 64 | } |
160 | 65 |
|
161 | 66 | @Test |
162 | | - public void mongodb_repository_clear() { |
163 | | - userRepository.persist(getUser(400L, "Robert", "SMITH")); |
164 | | - userRepository.persist(getUser(401L, "Jayne", "SMITH")); |
165 | | - assertThat(userRepository.load(400L).getEntityId()).isEqualTo(400L); |
166 | | - assertThat(userRepository.load(401L).getEntityId()).isEqualTo(401L); |
| 67 | + public void clear() { |
| 68 | + userRepository.add(createUser(400L, "Robert", "SMITH")); |
| 69 | + userRepository.add(createUser(401L, "Jayne", "SMITH")); |
| 70 | + assertThat(userRepository.get(400L)).isPresent(); |
| 71 | + assertThat(userRepository.get(401L)).isPresent(); |
167 | 72 | userRepository.clear(); |
168 | | - assertThat(userRepository.load(400L)).isNull(); |
169 | | - assertThat(userRepository.load(401L)).isNull(); |
| 73 | + assertThat(userRepository.get(400L)).isNotPresent(); |
| 74 | + assertThat(userRepository.get(401L)).isNotPresent(); |
170 | 75 | } |
171 | 76 |
|
172 | 77 | @Test |
173 | | - public void mongodb_repository_exists() { |
174 | | - userRepository.persist(getUser(300L, "Robert", "SMITH")); |
175 | | - assertThat(userRepository.exists(300L)).isTrue(); |
176 | | - assertThat(userRepository.exists(3010L)).isFalse(); |
| 78 | + public void contains() { |
| 79 | + userRepository.add(createUser(300L, "Robert", "SMITH")); |
| 80 | + assertThat(userRepository.contains(300L)).isTrue(); |
| 81 | + assertThat(userRepository.contains(3010L)).isFalse(); |
177 | 82 | } |
178 | 83 |
|
179 | 84 | @Test |
180 | | - public void mongodb_repository_count() { |
181 | | - userRepository.persist(getUser(300L, "Robert", "SMITH")); |
182 | | - userRepository.persist(getUser(301L, "Roberta", "SMITH")); |
183 | | - assertThat(userRepository.count()).isEqualTo(2); |
| 85 | + public void size() { |
| 86 | + userRepository.add(createUser(300L, "Robert", "SMITH")); |
| 87 | + userRepository.add(createUser(301L, "Roberta", "SMITH")); |
| 88 | + assertThat(userRepository.size()).isEqualTo(2); |
184 | 89 | } |
185 | 90 |
|
186 | | - public User getUser(long id, String firstname, String lastName) { |
| 91 | + private User createUser(long id, String firstname, String lastName) { |
187 | 92 | return new User(id, firstname, lastName, new Address("France", "75001", "Paris", "Champ Elysee avenue", 1)); |
188 | 93 | } |
189 | 94 | } |
0 commit comments