Skip to content

Commit dd089f0

Browse files
author
Mat Jones
committed
Add ResultRecord#doesNotHaveErrors and ResultRecord#getErrorMessageFor
1 parent 2dd503c commit dd089f0

2 files changed

Lines changed: 96 additions & 0 deletions

File tree

src/view-models/result-record.test.ts

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@ import { ResultRecord } from "./result-record";
22
import { ErrorType } from "../enumerations/error-type";
33
import { ResultErrorRecord } from "./result-error-record";
44
import { ResultError } from "../interfaces/result-error";
5+
import {
6+
ResultRecordFactory,
7+
ResultErrorRecordFactory,
8+
} from "../tests/factories";
59

610
describe("ResultRecord", () => {
711
// -----------------------------------------------------------------------------------------
@@ -203,6 +207,82 @@ describe("ResultRecord", () => {
203207

204208
// #endregion errorCount
205209

210+
// -----------------------------------------------------------------------------------------
211+
// #region doesNotHaveErrors
212+
// -----------------------------------------------------------------------------------------
213+
214+
describe("doesNotHaveErrors", () => {
215+
test("when errors is null, returns true", () => {
216+
expect(
217+
ResultRecordFactory.build({
218+
errors: (null as unknown) as any[],
219+
}).doesNotHaveErrors()
220+
).toBeTrue();
221+
});
222+
223+
test("when errors is undefined, returns true", () => {
224+
expect(
225+
ResultRecordFactory.build({
226+
errors: undefined,
227+
}).doesNotHaveErrors()
228+
).toBeTrue();
229+
});
230+
231+
test("when errors is empty array, returns true", () => {
232+
expect(
233+
ResultRecordFactory.build({ errors: [] }).doesNotHaveErrors()
234+
).toBeTrue();
235+
});
236+
237+
test("when errors is not empty, returns false", () => {
238+
// Arrange
239+
const errors = ResultErrorRecordFactory.buildList(1);
240+
241+
// Act & Assert
242+
expect(
243+
ResultRecordFactory.build({
244+
errors: errors,
245+
}).doesNotHaveErrors()
246+
).toBeFalse();
247+
});
248+
}); // end doesNotHaveErrors
249+
250+
// -----------------------------------------------------------------------------------------
251+
// #region getErrorMessageFor
252+
// -----------------------------------------------------------------------------------------
253+
254+
describe("#getErrorMessageFor", () => {
255+
it("When no error exists for given key, then returns undefined", () => {
256+
// Arrange
257+
const errorKey = "TEST_ERROR_KEY";
258+
const resultRecord = ResultRecordFactory.build({
259+
errors: [],
260+
});
261+
262+
// Act
263+
const result = resultRecord.getErrorMessageFor(errorKey);
264+
265+
// Assert
266+
expect(result).toBeNil();
267+
});
268+
269+
it("When an error exists for the given key, then returns the error message", () => {
270+
// Arrange
271+
const errorKey = "TEST_ERROR_KEY";
272+
const resultRecord = ResultRecordFactory.build({
273+
errors: ResultErrorRecordFactory.buildList(1, {
274+
key: errorKey,
275+
}),
276+
});
277+
278+
// Act
279+
const result = resultRecord.getErrorMessageFor(errorKey);
280+
281+
// Assert
282+
expect(result).not.toBeNil();
283+
});
284+
}); // end getErrorMessageFor
285+
206286
// -----------------------------------------------------------------------------------------
207287
// #region hasErrorFor
208288
// -----------------------------------------------------------------------------------------

src/view-models/result-record.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,14 @@ class ResultRecord<T> extends Record(defaultValues) implements Result<T> {
6060
return this._addErrorByType(key, message, ErrorType.ValidationError);
6161
}
6262

63+
/**
64+
* Evaluates whether there are any errors on the result
65+
* @returns {boolean}
66+
*/
67+
public doesNotHaveErrors(): boolean {
68+
return !this.hasErrors();
69+
}
70+
6371
/**
6472
* Returns total number of errors
6573
*/
@@ -71,6 +79,14 @@ class ResultRecord<T> extends Record(defaultValues) implements Result<T> {
7179
return CollectionUtils.hasValues(this.errors) ? this.errors.length : 0;
7280
}
7381

82+
/**
83+
* Returns an error message for a given key
84+
* @param key
85+
*/
86+
public getErrorMessageFor(key: string): string | undefined {
87+
return this.errors?.find((e) => e.key === key)?.message;
88+
}
89+
7490
/**
7591
* Determines if the result contains an error for the supplied key
7692
* @param key error key for which to search

0 commit comments

Comments
 (0)