@@ -27,66 +27,135 @@ public class CustomAssetTest extends AtlanLiveTest {
27
27
28
28
public static final AtlanConnectorType CONNECTOR_TYPE = AtlanConnectorType .CUSTOM ;
29
29
public static final String CONNECTION_NAME = PREFIX ;
30
- private static final String ENTITY_NAME = PREFIX + "-entity" ;
30
+ private static final String PARENT_NAME = PREFIX + "-parent" ;
31
+ private static final String CHILD_NAME1 = PREFIX + "-child1" ;
32
+ private static final String CHILD_NAME2 = PREFIX + "-child2" ;
31
33
32
34
private static Connection connection = null ;
33
- private static CustomEntity entity = null ;
35
+ private static CustomEntity parent = null ;
36
+ private static CustomEntity child1 = null ;
37
+ private static CustomEntity child2 = null ;
34
38
35
39
@ Test (groups = {"custom.create.connection" })
36
40
void createConnection () throws AtlanException , InterruptedException {
37
41
connection = ConnectionTest .createConnection (client , CONNECTION_NAME , CONNECTOR_TYPE );
38
42
}
39
43
40
44
@ Test (
41
- groups = {"custom.create.entity " },
45
+ groups = {"custom.create.parent " },
42
46
dependsOnGroups = {"custom.create.connection" })
43
- void createEntity () throws AtlanException {
44
- CustomEntity toCreate =
45
- CustomEntity .creator (ENTITY_NAME , connection .getQualifiedName ()).build ();
47
+ void createParent () throws AtlanException {
48
+ CustomEntity toCreate = CustomEntity .creator (PARENT_NAME , connection .getQualifiedName ())
49
+ .iconUrl ("http://assets.atlan.com/assets/ph-bowl-food-light.svg" )
50
+ .subType ("Fruit Salad" )
51
+ .build ();
46
52
AssetMutationResponse response = toCreate .save (client );
47
53
Asset one = validateSingleCreate (response );
48
54
assertTrue (one instanceof CustomEntity );
49
- entity = (CustomEntity ) one ;
50
- assertNotNull (entity .getGuid ());
51
- assertNotNull (entity .getQualifiedName ());
52
- assertEquals (entity .getName (), ENTITY_NAME );
53
- assertEquals (entity .getConnectorType (), CONNECTOR_TYPE );
54
- assertEquals (entity .getConnectionQualifiedName (), connection .getQualifiedName ());
55
+ parent = (CustomEntity ) one ;
56
+ assertNotNull (parent .getGuid ());
57
+ assertNotNull (parent .getQualifiedName ());
58
+ assertEquals (parent .getName (), PARENT_NAME );
59
+ assertEquals (parent .getConnectorType (), CONNECTOR_TYPE );
60
+ assertEquals (parent .getConnectionQualifiedName (), connection .getQualifiedName ());
55
61
}
56
62
57
63
@ Test (
58
- groups = {"custom.update.entity" },
59
- dependsOnGroups = {"custom.create.entity" })
60
- void updateEntity () throws AtlanException {
64
+ groups = {"custom.create.children" },
65
+ dependsOnGroups = {"custom.create.parent" })
66
+ void createChildren () throws AtlanException {
67
+ CustomEntity one = CustomEntity .creator (CHILD_NAME1 , connection .getQualifiedName ())
68
+ .iconUrl ("http://assets.atlan.com/assets/ph-apple-logo-light.svg" )
69
+ .subType ("Apple" )
70
+ .customParentEntity (CustomEntity .refByGuid (parent .getGuid ()))
71
+ .build ();
72
+ CustomEntity two = CustomEntity .creator (CHILD_NAME2 , connection .getQualifiedName ())
73
+ .iconUrl ("http://assets.atlan.com/assets/ph-orange-slice-light.svg" )
74
+ .subType ("Orange" )
75
+ .customParentEntity (CustomEntity .refByQualifiedName (parent .getQualifiedName ()))
76
+ .customRelatedToEntity (CustomEntity .refByGuid (one .getGuid ()))
77
+ .build ();
78
+ AssetMutationResponse response = client .assets .save (List .of (one , two ), false );
79
+ assertNotNull (response );
80
+ assertNotNull (response .getUpdatedAssets ());
81
+ assertEquals (response .getUpdatedAssets ().size (), 1 );
82
+ assertEquals (response .getUpdatedAssets ().get (0 ).getGuid (), parent .getGuid ());
83
+ assertNotNull (response .getCreatedAssets ());
84
+ assertEquals (response .getCreatedAssets ().size (), 2 );
85
+ for (Asset asset : response .getCreatedAssets ()) {
86
+ assertTrue (asset instanceof CustomEntity );
87
+ assertNotNull (asset .getGuid ());
88
+ assertNotNull (asset .getQualifiedName ());
89
+ assertEquals (asset .getConnectorType (), CONNECTOR_TYPE );
90
+ assertEquals (asset .getConnectionQualifiedName (), connection .getQualifiedName ());
91
+ if (asset .getName ().equals (CHILD_NAME1 )) {
92
+ child1 = (CustomEntity ) asset ;
93
+ } else if (asset .getName ().equals (CHILD_NAME2 )) {
94
+ child2 = (CustomEntity ) asset ;
95
+ } else {
96
+ throw new IllegalStateException ("Created entity did not match either we attempted to create." );
97
+ }
98
+ }
99
+ }
100
+
101
+ @ Test (
102
+ groups = {"custom.update.parent" },
103
+ dependsOnGroups = {"custom.create.*" })
104
+ void updateParent () throws AtlanException {
61
105
CustomEntity updated = CustomEntity .updateCertificate (
62
- client , entity .getQualifiedName (), CERTIFICATE_STATUS , CERTIFICATE_MESSAGE );
106
+ client , parent .getQualifiedName (), CERTIFICATE_STATUS , CERTIFICATE_MESSAGE );
63
107
assertNotNull (updated );
64
108
assertEquals (updated .getCertificateStatus (), CERTIFICATE_STATUS );
65
109
assertEquals (updated .getCertificateStatusMessage (), CERTIFICATE_MESSAGE );
66
110
updated = CustomEntity .updateAnnouncement (
67
- client , entity .getQualifiedName (), ANNOUNCEMENT_TYPE , ANNOUNCEMENT_TITLE , ANNOUNCEMENT_MESSAGE );
111
+ client , parent .getQualifiedName (), ANNOUNCEMENT_TYPE , ANNOUNCEMENT_TITLE , ANNOUNCEMENT_MESSAGE );
68
112
assertNotNull (updated );
69
113
assertEquals (updated .getAnnouncementType (), ANNOUNCEMENT_TYPE );
70
114
assertEquals (updated .getAnnouncementTitle (), ANNOUNCEMENT_TITLE );
71
115
assertEquals (updated .getAnnouncementMessage (), ANNOUNCEMENT_MESSAGE );
72
116
}
73
117
74
118
@ Test (
75
- groups = {"custom.read.entity " },
76
- dependsOnGroups = {"custom.create.*" , "custom.update.entity " })
77
- void retrieveEntity () throws AtlanException {
78
- CustomEntity c = CustomEntity .get (client , entity .getGuid (), true );
119
+ groups = {"custom.read.parent " },
120
+ dependsOnGroups = {"custom.create.*" , "custom.update.parent " })
121
+ void retrieveParent () throws AtlanException {
122
+ CustomEntity c = CustomEntity .get (client , parent .getGuid (), true );
79
123
assertNotNull (c );
80
124
assertTrue (c .isComplete ());
81
- assertEquals (c .getGuid (), entity .getGuid ());
82
- assertEquals (c .getQualifiedName (), entity .getQualifiedName ());
83
- assertEquals (c .getName (), ENTITY_NAME );
125
+ assertEquals (c .getGuid (), parent .getGuid ());
126
+ assertEquals (c .getQualifiedName (), parent .getQualifiedName ());
127
+ assertEquals (c .getName (), PARENT_NAME );
84
128
assertEquals (c .getCertificateStatus (), CERTIFICATE_STATUS );
129
+ assertEquals (c .getCustomChildEntities ().size (), 2 );
130
+ assertEquals (c .getSubType (), "Fruit Salad" );
131
+ assertEquals (c .getIconUrl (), "http://assets.atlan.com/assets/ph-bowl-food-light.svg" );
132
+ }
133
+
134
+ @ Test (
135
+ groups = {"custom.read.child1" },
136
+ dependsOnGroups = {"custom.create.*" , "custom.update.parent" })
137
+ void retrieveChild1 () throws AtlanException {
138
+ CustomEntity c = CustomEntity .get (client , child1 .getGuid (), true );
139
+ assertNotNull (c );
140
+ assertTrue (c .isComplete ());
141
+ assertEquals (c .getGuid (), child1 .getGuid ());
142
+ assertEquals (c .getQualifiedName (), child1 .getQualifiedName ());
143
+ assertEquals (c .getName (), CHILD_NAME1 );
144
+ assertTrue (
145
+ c .getCustomChildEntities () == null || c .getCustomChildEntities ().isEmpty ());
146
+ assertNotNull (c .getCustomParentEntity ());
147
+ assertEquals (c .getCustomParentEntity ().getGuid (), parent .getGuid ());
148
+ assertFalse (c .getCustomRelatedFromEntities () == null
149
+ || c .getCustomRelatedFromEntities ().isEmpty ());
150
+ assertEquals (c .getCustomRelatedFromEntities ().size (), 1 );
151
+ assertEquals (c .getCustomRelatedFromEntities ().first ().getGuid (), child2 .getGuid ());
152
+ assertEquals (c .getSubType (), "Apple" );
153
+ assertEquals (c .getIconUrl (), "http://assets.atlan.com/assets/ph-apple-logo-light.svg" );
85
154
}
86
155
87
156
@ Test (
88
157
groups = {"custom.search.assets" },
89
- dependsOnGroups = {"custom.read.entity " })
158
+ dependsOnGroups = {"custom.read.* " })
90
159
void searchAssets () throws AtlanException , InterruptedException {
91
160
IndexSearchRequest index = client .assets
92
161
.select ()
@@ -95,11 +164,12 @@ void searchAssets() throws AtlanException, InterruptedException {
95
164
.pageSize (10 )
96
165
.aggregate ("type" , IReferenceable .TYPE_NAME .bucketBy ())
97
166
.sort (Asset .CREATE_TIME .order (SortOrder .Asc ))
167
+ .sort (Asset .NAME .order (SortOrder .Asc ))
98
168
.includeOnResults (Asset .NAME )
99
169
.includeOnResults (Asset .CONNECTION_QUALIFIED_NAME )
100
170
.toRequest ();
101
171
102
- IndexSearchResponse response = retrySearchUntil (index , 9L );
172
+ IndexSearchResponse response = retrySearchUntil (index , 3L );
103
173
104
174
assertNotNull (response .getAggregations ());
105
175
assertEquals (response .getAggregations ().size (), 1 );
@@ -108,7 +178,7 @@ void searchAssets() throws AtlanException, InterruptedException {
108
178
((AggregationBucketResult ) response .getAggregations ().get ("type" ))
109
179
.getBuckets ()
110
180
.size (),
111
- 3 );
181
+ 1 );
112
182
113
183
assertEquals (response .getApproximateCount ().longValue (), 3L );
114
184
List <Asset > entities = response .getAssets ();
@@ -119,62 +189,78 @@ void searchAssets() throws AtlanException, InterruptedException {
119
189
assertTrue (one instanceof CustomEntity );
120
190
assertFalse (one .isComplete ());
121
191
CustomEntity d = (CustomEntity ) one ;
122
- assertEquals (d .getQualifiedName (), entity .getQualifiedName ());
123
- assertEquals (d .getName (), entity .getName ());
192
+ assertEquals (d .getQualifiedName (), parent .getQualifiedName ());
193
+ assertEquals (d .getName (), parent .getName ());
194
+ assertEquals (d .getConnectionQualifiedName (), connection .getQualifiedName ());
195
+
196
+ one = entities .get (1 );
197
+ assertTrue (one instanceof CustomEntity );
198
+ assertFalse (one .isComplete ());
199
+ d = (CustomEntity ) one ;
200
+ assertEquals (d .getQualifiedName (), child1 .getQualifiedName ());
201
+ assertEquals (d .getName (), child1 .getName ());
202
+ assertEquals (d .getConnectionQualifiedName (), connection .getQualifiedName ());
203
+
204
+ one = entities .get (2 );
205
+ assertTrue (one instanceof CustomEntity );
206
+ assertFalse (one .isComplete ());
207
+ d = (CustomEntity ) one ;
208
+ assertEquals (d .getQualifiedName (), child2 .getQualifiedName ());
209
+ assertEquals (d .getName (), child2 .getName ());
124
210
assertEquals (d .getConnectionQualifiedName (), connection .getQualifiedName ());
125
211
}
126
212
127
213
@ Test (
128
- groups = {"custom.delete.entity " },
214
+ groups = {"custom.delete.child2 " },
129
215
dependsOnGroups = {"custom.update.*" , "custom.search.*" })
130
- void deleteEntity () throws AtlanException {
131
- AssetMutationResponse response = Asset .delete (client , entity .getGuid ()).block ();
216
+ void deleteChild2 () throws AtlanException {
217
+ AssetMutationResponse response = Asset .delete (client , child2 .getGuid ()).block ();
132
218
assertNotNull (response );
133
219
assertTrue (response .getCreatedAssets ().isEmpty ());
134
220
assertTrue (response .getUpdatedAssets ().isEmpty ());
135
221
assertEquals (response .getDeletedAssets ().size (), 1 );
136
222
Asset one = response .getDeletedAssets ().get (0 );
137
223
assertTrue (one instanceof CustomEntity );
138
224
CustomEntity s = (CustomEntity ) one ;
139
- assertEquals (s .getGuid (), entity .getGuid ());
140
- assertEquals (s .getQualifiedName (), entity .getQualifiedName ());
225
+ assertEquals (s .getGuid (), child2 .getGuid ());
226
+ assertEquals (s .getQualifiedName (), child2 .getQualifiedName ());
141
227
assertEquals (s .getDeleteHandler (), "SOFT" );
142
228
assertEquals (s .getStatus (), AtlanStatus .DELETED );
143
229
}
144
230
145
231
@ Test (
146
- groups = {"custom.delete.entity .read" },
147
- dependsOnGroups = {"custom.delete.entity " })
232
+ groups = {"custom.delete.child2 .read" },
233
+ dependsOnGroups = {"custom.delete.child2 " })
148
234
void readDeletedEntity () throws AtlanException {
149
- validateDeletedAsset (entity , log );
235
+ validateDeletedAsset (child2 , log );
150
236
}
151
237
152
238
@ Test (
153
- groups = {"custom.delete.entity .restore" },
154
- dependsOnGroups = {"custom.delete.entity .read" })
239
+ groups = {"custom.delete.child2 .restore" },
240
+ dependsOnGroups = {"custom.delete.child2 .read" })
155
241
void restoreEntity () throws AtlanException {
156
- assertTrue (CustomEntity .restore (client , entity .getQualifiedName ()));
157
- CustomEntity restored = CustomEntity .get (client , entity .getQualifiedName ());
242
+ assertTrue (CustomEntity .restore (client , child2 .getQualifiedName ()));
243
+ CustomEntity restored = CustomEntity .get (client , child2 .getQualifiedName ());
158
244
assertFalse (restored .isComplete ());
159
- assertEquals (restored .getGuid (), entity .getGuid ());
160
- assertEquals (restored .getQualifiedName (), entity .getQualifiedName ());
245
+ assertEquals (restored .getGuid (), child2 .getGuid ());
246
+ assertEquals (restored .getQualifiedName (), child2 .getQualifiedName ());
161
247
assertEquals (restored .getStatus (), AtlanStatus .ACTIVE );
162
248
}
163
249
164
250
@ Test (
165
- groups = {"custom.purge.entity " },
166
- dependsOnGroups = {"custom.delete.entity .restore" })
251
+ groups = {"custom.purge.child2 " },
252
+ dependsOnGroups = {"custom.delete.child2 .restore" })
167
253
void purgeEntity () throws AtlanException {
168
- AssetMutationResponse response = Asset .purge (client , entity .getGuid ()).block ();
254
+ AssetMutationResponse response = Asset .purge (client , child2 .getGuid ()).block ();
169
255
assertNotNull (response );
170
256
assertTrue (response .getCreatedAssets ().isEmpty ());
171
257
assertTrue (response .getUpdatedAssets ().isEmpty ());
172
258
assertEquals (response .getDeletedAssets ().size (), 1 );
173
259
Asset one = response .getDeletedAssets ().get (0 );
174
260
assertTrue (one instanceof CustomEntity );
175
261
CustomEntity s = (CustomEntity ) one ;
176
- assertEquals (s .getGuid (), entity .getGuid ());
177
- assertEquals (s .getQualifiedName (), entity .getQualifiedName ());
262
+ assertEquals (s .getGuid (), child2 .getGuid ());
263
+ assertEquals (s .getQualifiedName (), child2 .getQualifiedName ());
178
264
assertEquals (s .getDeleteHandler (), "PURGE" );
179
265
assertEquals (s .getStatus (), AtlanStatus .DELETED );
180
266
}
@@ -186,7 +272,7 @@ void purgeEntity() throws AtlanException {
186
272
"custom.read.*" ,
187
273
"custom.search.*" ,
188
274
"custom.update.*" ,
189
- "custom.purge.entity "
275
+ "custom.purge.child2 "
190
276
},
191
277
alwaysRun = true )
192
278
void purgeConnection () throws AtlanException , InterruptedException {
0 commit comments