mirror of
https://github.com/TryGhost/Ghost.git
synced 2024-12-24 03:14:03 +03:00
Added verified member and verify method to Mention entity
closes https://github.com/TryGhost/Team/issues/2548 Rather than use a setter here we've used a verify method which takes the HTML string and naively validates that the target URL is present. This is so that the logic of verification is encapsulated in the Mention, and should mean that erroneous verification doesn't happen. We could consider down the line that the verify method fetches the content itself, but if we're to do that we should pass in `got` as a param, so that it's possible to stub in tests. One thing to think about when it comes time to making this as performant as possible is doing a single fetch of the source document and using that for verification and metadata extraction. At that point we should probably consolidate both of those operations, either moving the metadata extraction into the Mention entity (passing in any necessary deps) OR we move the verification out to the same layer as metadata extraction.
This commit is contained in:
parent
bf6bcdbff3
commit
90b7a3f4d0
@ -12,6 +12,23 @@ module.exports = class Mention {
|
||||
return this.#id;
|
||||
}
|
||||
|
||||
/** @type {boolean} */
|
||||
#verified = false;
|
||||
get verified() {
|
||||
return this.#verified;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {string} html
|
||||
*/
|
||||
verify(html) {
|
||||
if (html.includes(this.target.href)) {
|
||||
this.#verified = true;
|
||||
} else {
|
||||
this.#verified = false;
|
||||
}
|
||||
}
|
||||
|
||||
/** @type {URL} */
|
||||
#source;
|
||||
get source() {
|
||||
|
@ -32,6 +32,19 @@ describe('Mention', function () {
|
||||
});
|
||||
});
|
||||
|
||||
describe('verify', function () {
|
||||
it('Does basic check for the target URL and updates verified property', async function () {
|
||||
const mention = await Mention.create(validInput);
|
||||
assert(!mention.verified);
|
||||
|
||||
mention.verify('<a href="https://target.com/">');
|
||||
assert(mention.verified);
|
||||
|
||||
mention.verify('<a href="https://not-da-target.com">');
|
||||
assert(!mention.verified);
|
||||
});
|
||||
});
|
||||
|
||||
describe('create', function () {
|
||||
it('Will error with invalid inputs', async function () {
|
||||
const invalidInputs = [
|
||||
|
Loading…
Reference in New Issue
Block a user