This is an automated email from the ASF dual-hosted git repository.
pinal pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/atlas.git
The following commit(s) were added to refs/heads/master by this push:
new 9999bed01 ATLAS-4894: Atlas-UI: [UI] 'Exclude SubTypes' and 'Exclude
Sub-classifications' filter should be removed from referred attribute tab of
entity details page
9999bed01 is described below
commit 9999bed01002007118ef1bbd7306d16fbe615856
Author: Brijesh Bhalala <[email protected]>
AuthorDate: Wed Sep 18 16:40:38 2024 +0530
ATLAS-4894: Atlas-UI: [UI] 'Exclude SubTypes' and 'Exclude
Sub-classifications' filter should be removed from referred attribute tab of
entity details page
Signed-off-by: Pinal Shah <[email protected]>
---
.../search/SearchResultLayoutView_tmpl.html | 2 +
.../js/views/detail_page/DetailPageLayoutView.js | 2 +-
.../js/views/glossary/TermPropertiestLayoutView.js | 4 +-
.../views/search/RelationSearchResultLayoutView.js | 12 +--
.../js/views/search/SearchResultLayoutView.js | 3 +-
.../search/SearchResultLayoutView_tmpl.html | 2 +
.../js/views/detail_page/DetailPageLayoutView.js | 2 +-
.../js/views/glossary/TermPropertiestLayoutView.js | 4 +-
.../views/search/RelationSearchResultLayoutView.js | 12 +--
.../js/views/search/SearchResultLayoutView.js | 3 +-
.../main/java/org/apache/atlas/AtlasErrorCode.java | 2 +-
.../org/apache/atlas/glossary/GlossaryService.java | 2 +-
.../apache/atlas/glossary/GlossaryServiceTest.java | 93 ++++++++++++++++++++--
13 files changed, 114 insertions(+), 29 deletions(-)
diff --git
a/dashboardv2/public/js/templates/search/SearchResultLayoutView_tmpl.html
b/dashboardv2/public/js/templates/search/SearchResultLayoutView_tmpl.html
index f8cfad616..764516272 100644
--- a/dashboardv2/public/js/templates/search/SearchResultLayoutView_tmpl.html
+++ b/dashboardv2/public/js/templates/search/SearchResultLayoutView_tmpl.html
@@ -60,6 +60,7 @@
<input type="checkbox"
data-id="checkDeletedEntity" data-value="includeDE" id="historicalentities" />
<b>Show historical entities</b></label>
</div>
+ {{#unless isProfileDBView}}
<div class="inline exclude-subclassifications"
data-id="containerCheckBox" style="display: none;">
<label class="checkbox-inline btn"
for="subclassifications">
<input type="checkbox"
data-id="checkSubClassification" data-value="excludeSC" id="subclassifications"
/>
@@ -70,6 +71,7 @@
<input type="checkbox" data-id="checkSubType"
data-value="excludeST" id="subtypes" />
<b>Exclude sub-types</b></label>
</div>
+ {{/unless}}
</div>
</div>
<div id="r_searchResultTableLayoutView">
diff --git a/dashboardv2/public/js/views/detail_page/DetailPageLayoutView.js
b/dashboardv2/public/js/views/detail_page/DetailPageLayoutView.js
index 3f62d970f..9c2ac29c6 100644
--- a/dashboardv2/public/js/views/detail_page/DetailPageLayoutView.js
+++ b/dashboardv2/public/js/views/detail_page/DetailPageLayoutView.js
@@ -532,7 +532,7 @@ define(['require',
termData = "";
_.each(data, function(val) {
var glossaryName = val.qualifiedName ? val.qualifiedName :
val.displayText;
- termData += '<span class="btn btn-action btn-sm btn-icon
btn-blue" data-id="termClick" title= "' + glossaryName + '"><span>' +
_.escape(glossaryName) + '</span><i class="' + (val.relationshipStatus ==
"ACTIVE" ? 'fa fa-close' : "") + '" data-id="deleteTerm" data-guid="' +
val.guid + '" data-type="term" title="Remove Term"></i></span>';
+ termData += '<span class="btn btn-action btn-sm btn-icon
btn-blue" data-id="termClick" title= "' + _.escape(glossaryName) + '"><span>' +
_.escape(glossaryName) + '</span><i class="' + (val.relationshipStatus ==
"ACTIVE" ? 'fa fa-close' : "") + '" data-id="deleteTerm" data-guid="' +
val.guid + '" data-type="term" title="Remove Term"></i></span>';
});
this.ui.termList.find("span.btn").remove();
this.ui.termList.prepend(termData);
diff --git a/dashboardv2/public/js/views/glossary/TermPropertiestLayoutView.js
b/dashboardv2/public/js/views/glossary/TermPropertiestLayoutView.js
index e2bb72d20..f816ddfc0 100644
--- a/dashboardv2/public/js/views/glossary/TermPropertiestLayoutView.js
+++ b/dashboardv2/public/js/views/glossary/TermPropertiestLayoutView.js
@@ -92,10 +92,10 @@ define(['require',
var tableBody = '',
enums = obj.enums;
_.each(obj.data, function(value, key, list) {
- tableBody += '<tr><td>' + key + '</td><td
class="">' + that.getValue({
+ tableBody += '<tr><td>' + _.escape(key) +
'</td><td class="">' + _.escape(that.getValue({
"value": value,
"type": enums[key]
- }) + '</td></tr>';
+ })) + '</td></tr>';
});
return tableBody;
};
diff --git
a/dashboardv2/public/js/views/search/RelationSearchResultLayoutView.js
b/dashboardv2/public/js/views/search/RelationSearchResultLayoutView.js
index 61176b4f6..92e270730 100644
--- a/dashboardv2/public/js/views/search/RelationSearchResultLayoutView.js
+++ b/dashboardv2/public/js/views/search/RelationSearchResultLayoutView.js
@@ -569,7 +569,7 @@ define(['require',
uniqueAttributesValue =
obj.end1.uniqueAttributes[key];
}
uniqueAttributesValue =
uniqueAttributesValue ? uniqueAttributesValue : obj.end1.guid;
- return '<a title="' +
uniqueAttributesValue + '" href="#!/detailPage/' + obj.end1.guid +
'?from=relationshipSearch">' + uniqueAttributesValue + '</a>';
+ return '<a title="' +
_.escape(uniqueAttributesValue) + '" href="#!/detailPage/' + obj.end1.guid +
'?from=relationshipSearch">' + _.escape(uniqueAttributesValue) + '</a>';
}
}
})
@@ -591,7 +591,7 @@ define(['require',
uniqueAttributesValue =
obj.end2.uniqueAttributes[key];
}
uniqueAttributesValue =
uniqueAttributesValue ? uniqueAttributesValue : obj.end2.guid;
- return '<a title="' +
uniqueAttributesValue + '" href="#!/detailPage/' + obj.end2.guid +
'?from=relationshipSearch">' + uniqueAttributesValue + '</a>';
+ return '<a title="' +
_.escape(uniqueAttributesValue) + '" href="#!/detailPage/' + obj.end2.guid +
'?from=relationshipSearch">' + _.escape(uniqueAttributesValue) + '</a>';
}
}
})
@@ -618,14 +618,14 @@ define(['require',
var def =
this.relationshipDefCollection.fullCollection.find({ name:
this.value.relationshipName });
if (def) {
var attrObj = def ? Utils.getNestedSuperTypeObj({
data: def.toJSON(), collection: this.relationshipDefCollection, attrMerge: true
}) : [];
- _.each(attrObj, function(obj, key) {
- var key = obj.name,
+ _.each(attrObj, function(obj) {
+ var key = _.escape(obj.name),
isRenderable = _.contains(columnToShow,
key),
// isSortable =
obj.typeName.search(/(array|map)/i) == -1;
isSortable =
obj.typeName.search(/(string|date|boolean|int|number|byte|float|long|double|short)/i)
== 0; // commented : as sorting is required for all the columns except
non-primitive types
- col[obj.name] = {
- label: obj.name.capitalize(),
+ col[key] = {
+ label: key.capitalize(),
cell: "Html",
// headerCell:
Backgrid.HeaderHTMLDecodeCell,
editable: false,
diff --git a/dashboardv2/public/js/views/search/SearchResultLayoutView.js
b/dashboardv2/public/js/views/search/SearchResultLayoutView.js
index c9e57ad73..6f990f2f7 100644
--- a/dashboardv2/public/js/views/search/SearchResultLayoutView.js
+++ b/dashboardv2/public/js/views/search/SearchResultLayoutView.js
@@ -82,7 +82,8 @@ define(['require',
searchType: this.searchType,
fromView: this.fromView,
isGlossaryView: this.fromView == "glossary",
- isSearchTab: Utils.getUrlState.isSearchTab()
+ isSearchTab: Utils.getUrlState.isSearchTab(),
+ isProfileDBView: this.options.profileDBView
};
},
/** ui events hash */
diff --git
a/dashboardv3/public/js/templates/search/SearchResultLayoutView_tmpl.html
b/dashboardv3/public/js/templates/search/SearchResultLayoutView_tmpl.html
index 6aa3fe185..185b1c705 100644
--- a/dashboardv3/public/js/templates/search/SearchResultLayoutView_tmpl.html
+++ b/dashboardv3/public/js/templates/search/SearchResultLayoutView_tmpl.html
@@ -66,6 +66,7 @@
<input type="checkbox"
data-id="checkDeletedEntity" data-value="includeDE" id="historicalentities" />
<b>Show historical entities</b></label>
</div>
+ {{#unless isProfileDBView}}
<div class="inline exclude-subclassifications"
data-id="containerCheckBox" style="display: none;">
<label class="checkbox-inline btn"
for="subclassifications">
<input type="checkbox"
data-id="checkSubClassification" data-value="excludeSC" id="subclassifications"
/>
@@ -76,6 +77,7 @@
<input type="checkbox" data-id="checkSubType"
data-value="excludeST" id="subtypes" />
<b>Exclude sub-types</b></label>
</div>
+ {{/unless}}
</div>
</div>
</div>
diff --git a/dashboardv3/public/js/views/detail_page/DetailPageLayoutView.js
b/dashboardv3/public/js/views/detail_page/DetailPageLayoutView.js
index 854908da3..b198767aa 100644
--- a/dashboardv3/public/js/views/detail_page/DetailPageLayoutView.js
+++ b/dashboardv3/public/js/views/detail_page/DetailPageLayoutView.js
@@ -537,7 +537,7 @@ define(['require',
termData = "";
_.each(data, function(val) {
var glossaryName = val.qualifiedName ? val.qualifiedName :
val.displayText;
- termData += '<span class="btn btn-action btn-sm btn-icon
btn-blue" data-id="termClick" title= "' + glossaryName + '"><span>' +
_.escape(glossaryName) + '</span><i class="' + (val.relationshipStatus ==
"ACTIVE" ? 'fa fa-close' : "") + '" data-id="deleteTerm" data-guid="' +
val.guid + '" data-type="term" title="Remove Term"></i></span>';
+ termData += '<span class="btn btn-action btn-sm btn-icon
btn-blue" data-id="termClick" title= "' + _.escape(glossaryName) + '"><span>' +
_.escape(glossaryName) + '</span><i class="' + (val.relationshipStatus ==
"ACTIVE" ? 'fa fa-close' : "") + '" data-id="deleteTerm" data-guid="' +
val.guid + '" data-type="term" title="Remove Term"></i></span>';
});
this.ui.termList.find("span.btn").remove();
this.ui.termList.prepend(termData);
diff --git a/dashboardv3/public/js/views/glossary/TermPropertiestLayoutView.js
b/dashboardv3/public/js/views/glossary/TermPropertiestLayoutView.js
index e2bb72d20..f816ddfc0 100644
--- a/dashboardv3/public/js/views/glossary/TermPropertiestLayoutView.js
+++ b/dashboardv3/public/js/views/glossary/TermPropertiestLayoutView.js
@@ -92,10 +92,10 @@ define(['require',
var tableBody = '',
enums = obj.enums;
_.each(obj.data, function(value, key, list) {
- tableBody += '<tr><td>' + key + '</td><td
class="">' + that.getValue({
+ tableBody += '<tr><td>' + _.escape(key) +
'</td><td class="">' + _.escape(that.getValue({
"value": value,
"type": enums[key]
- }) + '</td></tr>';
+ })) + '</td></tr>';
});
return tableBody;
};
diff --git
a/dashboardv3/public/js/views/search/RelationSearchResultLayoutView.js
b/dashboardv3/public/js/views/search/RelationSearchResultLayoutView.js
index f277c4e5f..465d8712c 100644
--- a/dashboardv3/public/js/views/search/RelationSearchResultLayoutView.js
+++ b/dashboardv3/public/js/views/search/RelationSearchResultLayoutView.js
@@ -582,7 +582,7 @@ define(['require',
uniqueAttributesValue =
obj.end1.uniqueAttributes[key];
}
uniqueAttributesValue =
uniqueAttributesValue ? uniqueAttributesValue : obj.end1.guid;
- return '<a title="' +
uniqueAttributesValue + '" href="#!/detailPage/' + obj.end1.guid +
'?from=relationshipSearch">' + uniqueAttributesValue + '</a>';
+ return '<a title="' +
_.escape(uniqueAttributesValue) + '" href="#!/detailPage/' + obj.end1.guid +
'?from=relationshipSearch">' + _.escape(uniqueAttributesValue) + '</a>';
}
}
})
@@ -604,7 +604,7 @@ define(['require',
uniqueAttributesValue =
obj.end2.uniqueAttributes[key];
}
uniqueAttributesValue =
uniqueAttributesValue ? uniqueAttributesValue : obj.end2.guid;
- return '<a title="' +
uniqueAttributesValue + '" href="#!/detailPage/' + obj.end2.guid +
'?from=relationshipSearch">' + uniqueAttributesValue + '</a>';
+ return '<a title="' +
_.escape(uniqueAttributesValue) + '" href="#!/detailPage/' + obj.end2.guid +
'?from=relationshipSearch">' + _.escape(uniqueAttributesValue) + '</a>';
}
}
})
@@ -631,14 +631,14 @@ define(['require',
var def =
this.relationshipDefCollection.fullCollection.find({ name:
this.value.relationshipName });
if (def) {
var attrObj = def ? Utils.getNestedSuperTypeObj({
data: def.toJSON(), collection: this.relationshipDefCollection, attrMerge: true
}) : [];
- _.each(attrObj, function(obj, key) {
- var key = obj.name,
+ _.each(attrObj, function(obj) {
+ var key = _.escape(obj.name),
isRenderable = _.contains(columnToShow,
key),
// isSortable =
obj.typeName.search(/(array|map)/i) == -1;
isSortable =
obj.typeName.search(/(string|date|boolean|int|number|byte|float|long|double|short)/i)
== 0; // commented : as sorting is required for all the columns except
non-primitive types
- col[obj.name] = {
- label: obj.name.capitalize(),
+ col[key] = {
+ label: key.capitalize(),
cell: "Html",
// headerCell:
Backgrid.HeaderHTMLDecodeCell,
editable: false,
diff --git a/dashboardv3/public/js/views/search/SearchResultLayoutView.js
b/dashboardv3/public/js/views/search/SearchResultLayoutView.js
index 16db56623..7abfd56a3 100644
--- a/dashboardv3/public/js/views/search/SearchResultLayoutView.js
+++ b/dashboardv3/public/js/views/search/SearchResultLayoutView.js
@@ -83,7 +83,8 @@ define(['require',
searchType: this.searchType,
fromView: this.fromView,
isGlossaryView: this.fromView == "glossary",
- isSearchTab: Utils.getUrlState.isSearchTab()
+ isSearchTab: Utils.getUrlState.isSearchTab(),
+ isProfileDBView: this.options.profileDBView
};
},
/** ui events hash */
diff --git a/intg/src/main/java/org/apache/atlas/AtlasErrorCode.java
b/intg/src/main/java/org/apache/atlas/AtlasErrorCode.java
index 77a6fd8c3..61b8155b9 100644
--- a/intg/src/main/java/org/apache/atlas/AtlasErrorCode.java
+++ b/intg/src/main/java/org/apache/atlas/AtlasErrorCode.java
@@ -146,7 +146,7 @@ public enum AtlasErrorCode {
INVALID_TERM_DISSOCIATION(400, "ATLAS-400-00-080", "Given
relationshipGuid({0}) is invalid for term (guid={1}) and entity(guid={2})"),
ATTRIBUTE_TYPE_INVALID(400, "ATLAS-400-00-081", "{0}.{1}: invalid
attribute type. Attribute cannot be of type classification"),
MISSING_CATEGORY_DISPLAY_NAME(400, "ATLAS-400-00-082", "Category name is
empty/null"),
- INVALID_DISPLAY_NAME(400, "ATLAS-400-00-083", "name cannot contain
following special chars ('@', '.')"),
+ INVALID_DISPLAY_NAME(400, "ATLAS-400-00-083", "name cannot contain
following special chars ('@', '.', '<', '>')"),
TERM_HAS_ENTITY_ASSOCIATION(400, "ATLAS-400-00-084", "Term (guid={0})
cannot be deleted as it has been assigned to {1} entities."),
INVALID_TIMEBOUNDRY_TIMEZONE(400, "ATLAS-400-00-085", "Invalid timezone
{0}"),
INVALID_TIMEBOUNDRY_START_TIME(400, "ATLAS-400-00-086", "Invalid startTime
{0}"),
diff --git
a/repository/src/main/java/org/apache/atlas/glossary/GlossaryService.java
b/repository/src/main/java/org/apache/atlas/glossary/GlossaryService.java
index 87fc2cd49..298fda359 100644
--- a/repository/src/main/java/org/apache/atlas/glossary/GlossaryService.java
+++ b/repository/src/main/java/org/apache/atlas/glossary/GlossaryService.java
@@ -88,7 +88,7 @@ public class GlossaryService {
private final AtlasEntityChangeNotifier entityChangeNotifier;
private final AtlasGlossaryDTO glossaryDTO;
- private static final char[] invalidNameChars = { '@', '.' };
+ private static final char[] invalidNameChars = { '@', '.', '<', '>'};
private static final Map<String, String> glossaryGuidQualifiedNameCache =
new HashMap<>();
private static final Map<String, String> categoryGuidNameCache =
new HashMap<>();
diff --git
a/repository/src/test/java/org/apache/atlas/glossary/GlossaryServiceTest.java
b/repository/src/test/java/org/apache/atlas/glossary/GlossaryServiceTest.java
index 007b2f24e..853293ec5 100644
---
a/repository/src/test/java/org/apache/atlas/glossary/GlossaryServiceTest.java
+++
b/repository/src/test/java/org/apache/atlas/glossary/GlossaryServiceTest.java
@@ -89,9 +89,9 @@ public class GlossaryServiceTest {
@Inject
private AtlasEntityStore entityStore;
- private AtlasGlossary bankGlossary, creditUnionGlossary;
- private AtlasGlossaryTerm checkingAccount, savingsAccount,
fixedRateMortgage, adjustableRateMortgage;
- private AtlasGlossaryCategory customerCategory, accountCategory,
mortgageCategory;
+ private AtlasGlossary bankGlossary, creditUnionGlossary,
debitUnionGlossary;
+ private AtlasGlossaryTerm checkingAccount, savingsAccount,
fixedRateMortgage, adjustableRateMortgage, currentAccount;
+ private AtlasGlossaryCategory customerCategory, accountCategory,
mortgageCategory, loanCategory;
private AtlasRelatedObjectId relatedObjectId;
@Inject
@@ -104,9 +104,9 @@ public class GlossaryServiceTest {
public static Object[][] getGlossaryTermsProvider() {
return new Object[][]{
// offset, limit, expected
- {0, -1, 7},
+ {0, -1, 8},
{0, 2, 2},
- {2, 6, 5},
+ {2, 6, 6},
};
}
@@ -144,6 +144,13 @@ public class GlossaryServiceTest {
creditUnionGlossary.setUsage("N/A");
creditUnionGlossary.setLanguage("en-US");
+ debitUnionGlossary = new AtlasGlossary();
+ debitUnionGlossary.setName("<Debit union glossary");
+ debitUnionGlossary.setShortDescription("Short description");
+ debitUnionGlossary.setLongDescription("Long description");
+ debitUnionGlossary.setUsage("N/A");
+ debitUnionGlossary.setLanguage("en-US");
+
// Category
accountCategory = new AtlasGlossaryCategory();
accountCategory.setName("Account categorization");
@@ -161,6 +168,11 @@ public class GlossaryServiceTest {
mortgageCategory.setShortDescription("Short description");
mortgageCategory.setLongDescription("Long description");
+ loanCategory = new AtlasGlossaryCategory();
+ loanCategory.setName("Loan categorization>");
+ loanCategory.setShortDescription("Short description");
+ loanCategory.setLongDescription("Long description");
+
// Terms
checkingAccount = new AtlasGlossaryTerm();
checkingAccount.setName("A checking account");
@@ -196,6 +208,13 @@ public class GlossaryServiceTest {
adjustableRateMortgage.setExamples(Arrays.asList("5/1", "7/1",
"10/1"));
adjustableRateMortgage.setUsage("N/A");
+ currentAccount = new AtlasGlossaryTerm();
+ currentAccount.setName("current@account");
+ currentAccount.setShortDescription("Short description");
+ currentAccount.setLongDescription("Long description");
+ currentAccount.setAbbreviation("CURR");
+ currentAccount.setExamples(Arrays.asList("Personal", "Joint"));
+ currentAccount.setUsage("N/A");
}
@@ -224,6 +243,14 @@ public class GlossaryServiceTest {
assertEquals(e.getAtlasErrorCode(),
AtlasErrorCode.GLOSSARY_ALREADY_EXISTS);
}
+ //Validate glossary creation
+ try {
+ glossaryService.createGlossary(debitUnionGlossary);
+ fail("Invalid glossary creation should've failed");
+ } catch (AtlasBaseException e) {
+ assertEquals(e.getAtlasErrorCode(),
AtlasErrorCode.INVALID_DISPLAY_NAME);
+ }
+
// Retrieve the glossary and see ensure no terms or categories are
linked
try {
@@ -260,11 +287,13 @@ public class GlossaryServiceTest {
fixedRateMortgage.setAnchor(glossaryId);
adjustableRateMortgage.setAnchor(glossaryId);
+ currentAccount.setAnchor(glossaryId);
// Create glossary categories
accountCategory.setAnchor(glossaryId);
customerCategory.setAnchor(glossaryId);
mortgageCategory.setAnchor(glossaryId);
+ loanCategory.setAnchor(glossaryId);
}
@Test(groups = "Glossary.CREATE" , dependsOnMethods =
"testCategoryCreation")
@@ -276,6 +305,14 @@ public class GlossaryServiceTest {
} catch (AtlasBaseException e) {
fail("Term creation should've succeeded", e);
}
+
+ //validating term creation
+ try {
+ glossaryService.createTerm(currentAccount);
+ fail("Invalid term creation should've failed");
+ } catch (AtlasBaseException e) {
+ assertEquals(e.getAtlasErrorCode(),
AtlasErrorCode.INVALID_DISPLAY_NAME);
+ }
}
@Test(groups = "Glossary.CREATE" , dependsOnMethods =
"testTermCreationWithoutAnyRelations")
@@ -375,6 +412,15 @@ public class GlossaryServiceTest {
} catch (AtlasBaseException e) {
fail("Category creation should've succeeded", e);
}
+
+ // Validate category creation
+ try {
+ glossaryService.createCategory(loanCategory);
+ fail("Invalid category creation should've failed");
+ } catch (AtlasBaseException e) {
+ assertEquals(e.getAtlasErrorCode(),
AtlasErrorCode.INVALID_DISPLAY_NAME);
+ }
+
}
@@ -425,6 +471,18 @@ public class GlossaryServiceTest {
} catch (AtlasBaseException e) {
fail("Glossary fetch/update should've succeeded", e);
}
+
+ //Validate glossary update
+ try {
+ debitUnionGlossary.setName("Test Glossary Update");
+ debitUnionGlossary =
glossaryService.createGlossary(debitUnionGlossary);
+ assertNotNull(debitUnionGlossary);
+ debitUnionGlossary.setName("<test glossary create>");
+ glossaryService.updateGlossary(debitUnionGlossary);
+ fail("Invalid glossary update should've failed");
+ } catch (AtlasBaseException e) {
+ assertEquals(e.getAtlasErrorCode(),
AtlasErrorCode.INVALID_DISPLAY_NAME);
+ }
}
@Test(dependsOnGroups = {"Glossary.MIGRATE"})
@@ -529,6 +587,17 @@ public class GlossaryServiceTest {
fail("Glossary term fetch/update should've succeeded", e);
}
}
+ //Validate term update
+ try {
+ currentAccount.setName("Test term update");
+ currentAccount = glossaryService.createTerm(currentAccount);
+ currentAccount.setName("<Test term update>");
+ glossaryService.updateTerm(currentAccount);
+ fail("Invalid term update should've failed");
+ } catch (AtlasBaseException e) {
+ assertEquals(e.getAtlasErrorCode(),
AtlasErrorCode.INVALID_DISPLAY_NAME);
+ }
+
}
@Test(groups = "Glossary.UPDATE", dependsOnGroups = "Glossary.CREATE")
@@ -576,6 +645,16 @@ public class GlossaryServiceTest {
} catch (AtlasBaseException e) {
fail("Customer category fetch should've succeeded");
}
+ //Validate category update
+ try {
+ loanCategory.setName("Test category update");
+ loanCategory = glossaryService.createCategory(loanCategory);
+ loanCategory.setName("<Test category update>");
+ glossaryService.updateCategory(loanCategory);
+ fail("Invalid category update should've failed");
+ } catch (AtlasBaseException e) {
+ assertEquals(e.getAtlasErrorCode(),
AtlasErrorCode.INVALID_DISPLAY_NAME);
+ }
}
@Test(groups = "Glossary.MIGRATE", dependsOnGroups =
"Glossary.GET.postUpdate")
@@ -921,9 +1000,9 @@ public class GlossaryServiceTest {
public Object[][] getGlossaryCategoriesProvider() {
return new Object[][]{
// offset, limit, expected
- {0, -1, 3},
+ {0, -1, 4},
{0, 2, 2},
- {2, 5, 1},
+ {2, 5, 2},
};
}