Skip to content

Commit

Permalink
Added a fix for assert.hasAttribute (#3651)
Browse files Browse the repository at this point in the history
  • Loading branch information
harshit-bs authored and AutomatedTester committed May 15, 2023
1 parent fcbf572 commit 901c63f
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 47 deletions.
26 changes: 11 additions & 15 deletions lib/api/assertions/hasAttribute.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
* @api assertions
*/

const {setElementSelectorProps, containsMultiple} = require('../../utils');
const {setElementSelectorProps, isString} = require('../../utils');

exports.assertion = function(definition, expectedAttribute, msg) {
this.options = {
Expand All @@ -32,35 +32,31 @@ exports.assertion = function(definition, expectedAttribute, msg) {


this.formatMessage = function() {
if (!isString(expectedAttribute)) {
throw new Error('Expected attribute must be a string');
}

let message = msg || `Testing if element %s ${this.negate ? 'doesn\'t have attribute %s' : 'has attribute %s'}`;

return {
message,
args: [this.elementSelector, `'${Array.isArray(expectedAttribute) ? expectedAttribute.join(' ') : expectedAttribute}'`]
args: [this.elementSelector, `'${expectedAttribute}'`]
};
};

this.evaluate = function() {
if (!this.attributeList) {
return false;
}

return containsMultiple(this.attributeList, expectedAttribute, ' ');
};
const {result} = this;

this.value = function(result) {
if (!result || !result.value) {
return '';
return false;
}

this.attributeList = result.value.map(attribute => attribute.name);

return this.attributeList;

return true;
};

this.command = function(callback) {
this.api.getAttribute(setElementSelectorProps(definition, {
suppressNotFoundErrors: true
}), 'attributes', callback);
}), expectedAttribute, callback);
};
};
57 changes: 25 additions & 32 deletions test/src/api/assertions/testHasAttribute.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ describe('assert.hasAttribute', function () {
return assertionTest({
args: ['.test_element', 'data-test', 'Test message'],
commandResult: {
value: [{name: 'data-track'}, {name: 'data-test'}]
value: 'data-track'
},
assertMessage: true,
assertion({instance, failure}) {
Expand All @@ -28,16 +28,16 @@ describe('assert.hasAttribute', function () {
return assertionTest({
args: ['.test_element', 'data-test'],
commandResult: {
value: [{name: 'data-track'}]
value: 'data-track'
},
negate: true,
assertion({instance, queueOpts, message}) {
assert.strictEqual(typeof err, 'undefined');
assert.strictEqual(queueOpts.negate, true);

assert.strictEqual(instance.hasFailure(), false);
assert.deepStrictEqual(instance.getValue(), ['data-track']);
assert.deepStrictEqual(instance.getActual(), ['data-track']);
assert.deepStrictEqual(instance.getValue(), 'data-track');
assert.deepStrictEqual(instance.getActual(), 'data-track');
assert.strictEqual(instance.message, 'Testing if element <.test_element> doesn\'t have attribute \'data-test\'');
assert.ok(message.startsWith('Testing if element <.test_element> doesn\'t have attribute \'data-test\''), message);
}
Expand All @@ -48,15 +48,15 @@ describe('assert.hasAttribute', function () {
return assertionTest({
args: ['.test_element', 'data-test'],
commandResult: {
value: [{name: 'data-test'}]
value: 'data-test'
},
negate: true,
assertError: true,
assertion({instance, queueOpts, err}) {
assert.strictEqual(queueOpts.negate, true);
assert.strictEqual(instance.hasFailure(), false);
assert.deepStrictEqual(instance.getValue(), ['data-test']);
assert.deepStrictEqual(instance.getActual(), ['data-test']);
assert.deepStrictEqual(instance.getValue(), 'data-test');
assert.deepStrictEqual(instance.getActual(), 'data-test');
assert.strictEqual(err.message, `Testing if element <.test_element> doesn't have attribute 'data-test' in 5ms - expected "has not data-test" but got: "data-test" (${instance.elapsedTime}ms)`);
}
});
Expand All @@ -66,13 +66,13 @@ describe('assert.hasAttribute', function () {
return assertionTest({
args: [{selector: '.test_element'}, 'data-test'],
commandResult: {
value: [{name: 'data-test'}]
value: 'data-test'
},
assertResult: true,
assertion({instance, failure, message, err}) {
assert.strictEqual(err, undefined);
assert.deepStrictEqual(instance.options, {elementSelector: true});
assert.deepStrictEqual(instance.getActual(), ['data-test']);
assert.deepStrictEqual(instance.getActual(), 'data-test');
assert.strictEqual(instance.hasFailure(), false);
assert.ok(message.startsWith('Testing if element <.test_element> has attribute \'data-test\''), message);
assert.strictEqual(failure, false);
Expand All @@ -84,33 +84,13 @@ describe('assert.hasAttribute', function () {
return assertionTest({
args: ['.test_element', 'data-test', 'Test message'],
commandResult: {
value: [{name: 'not_expected'}]
value: null
},
assertError: true,
assertResult: true,
assertion({instance, failure}) {
assert.deepStrictEqual(instance.getActual(), ['not_expected']);
assert.strictEqual(failure, 'Expected "has data-test" but got: "not_expected"');
}
});
});

it('hasAttribute assertion - element not found', function() {
return assertionTest({
args: ['.test_element', 'data-test', 'Test attribute %s from element "%s" == %s'],
commandResult: {
status: -1,
value: []
},
assertError: true,
assertFailure: true,
assertResult: true,
assertion({instance, failure, err}) {
assert.strictEqual(instance.getActual(), 'element could not be located');
assert.strictEqual(instance.expected(), 'has data-test');
assert.strictEqual(instance.getValue(), null);
assert.strictEqual(failure, 'Expected "has data-test" but got: "element could not be located"');
assert.strictEqual(err.message, `Test attribute <.test_element> from element "'data-test'" == %s in 5ms - expected "has data-test" but got: "element could not be located" (${instance.elapsedTime}ms)`);
assert.deepStrictEqual(instance.getActual(), null);
assert.strictEqual(failure, 'Expected "has data-test" but got: "null"');
}
});
});
Expand All @@ -132,4 +112,17 @@ describe('assert.hasAttribute', function () {
}
});
});

it('hasAttribute assertion failed for wrong parameters', function () {
return assertionTest({
args: ['.test_element', ['data-test', 'dummy'], 'Test message'],
commandResult: {
value: 'data-track'
},
assertMessage: true
}).catch((err) => {
assert.ok(err instanceof Error);
assert.strictEqual(err.message, 'Error while running "assert.hasAttribute" command: Expected attribute must be a string');
});
});
});

0 comments on commit 901c63f

Please sign in to comment.