UNPKG

yoastseo-dep

Version:

Yoast clientside page analysis

284 lines (239 loc) 9.93 kB
import Paper from "../../src/values/Paper.js"; import Node from "../../src/parse/structure/Node"; describe( "Paper", function() { describe( "Creating a Paper", function() { it( "returns and empty keyword and text when no args are given", function() { const mockPaper = new Paper( "" ); expect( mockPaper.getKeyword() ).toBe( "" ); expect( mockPaper.getText() ).toBe( "" ); } ); it( "returns and a valid keyword and text when args are given", function() { const mockPaper = new Paper( "text with keyword", { keyword: "keyword" } ); expect( mockPaper.getKeyword() ).toBe( "keyword" ); expect( mockPaper.getText() ).toBe( "text with keyword" ); } ); it( "returns description", function() { let paper = new Paper( "text, metaValues" ); expect( paper.hasDescription() ).toBe( false ); expect( paper.getDescription() ).toBe( "" ); const attributes = { keyword: "keyword", description: "this is a meta", }; paper = new Paper( "text", attributes ); expect( paper.hasDescription() ).toBe( true ); expect( paper.getDescription() ).toBe( "this is a meta" ); } ); it( "should return the slug", function() { const attributes = { slug: "post-slug", }; const paper = new Paper( "text", attributes ); expect( paper.hasSlug() ).toBe( true ); expect( paper.getSlug() ).toBe( "post-slug" ); } ); it( "should return the slug, even though we use the deprecated url parameter", function() { const attributes = { url: "post-slug", }; const consoleSpy = jest.spyOn( console, "warn" ).mockImplementation(); const paper = new Paper( "text", attributes ); expect( paper.hasSlug() ).toBe( true ); expect( paper.getSlug() ).toBe( "post-slug" ); expect( consoleSpy ).toHaveBeenCalled(); } ); it( "should return the slug, even though we pass an empty, deprecated url parameter", function() { const attributes = { slug: "post-slug", url: "", }; const consoleSpy = jest.spyOn( console, "warn" ).mockImplementation(); const paper = new Paper( "text", attributes ); expect( paper.hasSlug() ).toBe( true ); expect( paper.getSlug() ).toBe( "post-slug" ); expect( consoleSpy ).toHaveBeenCalled(); } ); it( "returns synonyms", function() { const attributes = { keyword: "website", synonyms: "site", }; const paper = new Paper( "text", attributes ); expect( paper.hasSynonyms() ).toBe( true ); expect( paper.getSynonyms() ).toBe( "site" ); } ); it( "returns title", function() { const attributes = { title: "title", titleWidth: 10, }; const paper = new Paper( "text", attributes ); expect( paper.hasTitle() ).toBe( true ); expect( paper.getTitle() ).toBe( "title" ); expect( paper.hasTitleWidth() ).toBe( true ); } ); it( "returns nothing", function() { const paper = new Paper( "text" ); expect( paper.hasTitle() ).toBe( false ); expect( paper.hasDescription() ).toBe( false ); expect( paper.hasSlug() ).toBe( false ); expect( paper.hasKeyword() ).toBe( false ); expect( paper.hasTitleWidth() ).toBe( false ); expect( paper.hasCustomData() ).toBe( false ); } ); it( "returns locale", function() { let paper = new Paper( "" ); expect( paper.getLocale() ).toBe( "en_US" ); paper = new Paper( "", { locale: "de_DE" } ); expect( paper.getLocale() ).toBe( "de_DE" ); paper = new Paper( "", { locale: "" } ); expect( paper.getLocale() ).toBe( "en_US" ); expect( paper.hasLocale() ).toBe( true ); } ); it( "returns custom data", function() { const attributes = { customData: { hasGlobalIdentifier: false, hasVariants: true, doAllVariantsHaveIdentifier: true }, }; const paper = new Paper( "", attributes ); expect( paper.hasCustomData() ).toBe( true ); expect( paper.getCustomData() ).toEqual( { hasGlobalIdentifier: false, hasVariants: true, doAllVariantsHaveIdentifier: true } ); } ); it( "returns the text title", function() { const attributes = { textTitle: "A text title", }; const paper = new Paper( "", attributes ); expect( paper.hasTextTitle() ).toBe( true ); expect( paper.getTextTitle() ).toEqual( "A text title" ); } ); it( "returns the information of the paper's writing direction", function() { const attributes = { writingDirection: "RTL", }; const paper = new Paper( "", attributes ); expect( paper.getWritingDirection() ).toBe( "RTL" ); } ); it( "returns the default value (LTR) for the writing direction when it's not provided during Paper initialization", function() { const attributes = {}; const paper = new Paper( "", attributes ); expect( paper.getWritingDirection() ).toBe( "LTR" ); } ); } ); describe( "hasPermalink", function() { it( "has no permalink on construction", function() { const paper = new Paper( "" ); expect( paper.hasPermalink() ).toBe( false ); } ); it( "has a permalink when passed one", function() { const paper = new Paper( "", { permalink: "permalink" } ); expect( paper.hasPermalink() ).toBe( true ); } ); it( "has no permalink when passed an empty permalink", function() { const paper = new Paper( "", { permalink: "" } ); expect( paper.hasPermalink() ).toBe( false ); } ); } ); describe( "Create a paper with keyword with dollar sign", function() { it( "Should return keyword with dollar sign", function() { const paper = new Paper( "", { keyword: "$keyword" } ); expect( paper.getKeyword() ).toBe( "$keyword" ); } ); } ); describe( "Comparing papers", function() { const attributes1 = { slug: "test-test" }; const attributes2 = { slug: "test-test-test" }; it( "should identify two papers with similar content as equal", function() { const paper1 = new Paper( "This is a test" ); const paper2 = new Paper( "This is a test" ); expect( paper1.equals( paper2 ) ).toBe( true ); } ); it( "should identify two papers with dissimilar content as not equal", function() { const paper1 = new Paper( "This is a test" ); const paper2 = new Paper( "This is a test, but with different content" ); expect( paper1.equals( paper2 ) ).toBe( false ); } ); it( "should identify two papers with similar content and attributes as equal", function() { const paper1 = new Paper( "This is a test", attributes1 ); const paper2 = new Paper( "This is a test", attributes1 ); expect( paper1.equals( paper2 ) ).toBe( true ); } ); it( "should identify two papers with similar content but dissimilar attributes as not equal", function() { const paper1 = new Paper( "This is a test", attributes1 ); const paper2 = new Paper( "This is a test", attributes2 ); expect( paper1.equals( paper2 ) ).toBe( false ); } ); } ); describe( "hasText", function() { it( "should return true if contains raw text", function() { const paper = new Paper( "This is a test" ); expect( paper.hasText() ).toBeTruthy(); } ); it( "should return true if contains text with html tags", function() { const paper = new Paper( "<h1>This is a title</h1><p>This is a paragraph</p>" ); expect( paper.hasText() ).toBeTruthy(); } ); it( "should return true if contains only html tag", function() { // eslint-disable-next-line max-len const paper = new Paper( "<img src=\"https://yoast.com/cdn-cgi/image/width=466%2Cheight=244%2Cfit=crop%2Cf=auto%2Conerror=redirect//app/uploads/2017/12/Focus_keyword_FI.jpg\">" ); expect( paper.hasText() ).toBeTruthy(); } ); it( "should return true if contains a string of spaces", function() { const paper = new Paper( " " ); expect( paper.hasText() ).toBeTruthy(); } ); it( "should return false paper is empty string", function() { const paper = new Paper( "" ); expect( paper.hasText() ).toBeFalsy(); } ); } ); describe( "Parsing a Paper", () => { const serialized = { text: "text", _parseClass: "Paper", titleWidth: 123 }; const attributes = [ "keyword", "synonyms", "description", "title", "slug", "locale", "permalink", "date", "customData" ]; // Append the attributes to `serialized`. attributes.forEach( attribute => { serialized[ attribute ] = attribute; } ); it( "creates a Paper instance from an Object", () => { const paper = Paper.parse( serialized ); expect( paper instanceof Paper ).toBe( true ); } ); it( "detects a Paper instance and prevents a new instance", () => { const paper = new Paper( "text", {} ); // Checks if the memory address is the same, which would fail if a new instance was made. expect( Paper.parse( paper ) ).toBe( paper ); } ); describe( "contains the data", () => { const paper = Paper.parse( serialized ); it( "contains the text", () => { expect( paper._text ).toBe( "text" ); expect( paper.hasText() ).toBe( true ); expect( paper.getText() ).toBe( "text" ); } ); attributes.forEach( attribute => { const capitalized = attribute.charAt( 0 ).toUpperCase() + attribute.slice( 1 ); it( `contains the ${ attribute }`, () => { expect( paper._attributes[ attribute ] ).toBe( attribute ); expect( paper[ `has${ capitalized }` ]() ).toBe( true ); expect( paper[ `get${ capitalized }` ]() ).toBe( attribute ); } ); } ); it( "contains the titleWidth", () => { expect( paper._attributes.titleWidth ).toBe( 123 ); expect( paper.hasTitleWidth() ).toBe( true ); expect( paper.getTitleWidth() ).toBe( 123 ); } ); it( "does not contain the _parseClass", () => { expect( paper._attributes._parseClass ).not.toBeDefined(); } ); } ); } ); describe( "A test for setters and getters", function() { it( "should properly set and get a tree.", function() { const tree = new Node( "a" ); const mockPaper = new Paper( "" ); mockPaper.setTree( tree ); expect( mockPaper._tree ).toEqual( tree ); expect( mockPaper.getTree() ).toEqual( tree ); } ); } ); } );