/* eslint-disable n/handle-callback-err, max-len, no-return-assign, no-unused-vars, */ // TODO: This file was created by bulk-decaffeinate. // Fix any style issues and re-enable lint. /* * decaffeinate suggestions: * DS102: Remove unnecessary code created because of implicit returns * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md */ const { expect } = require('chai') const SandboxedModule = require('sandboxed-module') const assert = require('assert') const path = require('path') const sinon = require('sinon') const modulePath = path.join( __dirname, '../../../../app/src/Features/BrandVariations/BrandVariationsHandler' ) describe('BrandVariationsHandler', function () { beforeEach(function () { this.settings = { apis: { v1: { publicUrl: 'http://overleaf.example.com', }, }, modules: { sanitize: { options: { allowedTags: ['br', 'strong'], allowedAttributes: { strong: ['style'], }, }, }, }, } this.V1Api = { request: sinon.stub() } this.BrandVariationsHandler = SandboxedModule.require(modulePath, { requires: { '@overleaf/settings': this.settings, '../V1/V1Api': this.V1Api, }, }) return (this.mockedBrandVariationDetails = { id: '12', active: true, brand_name: 'The journal', logo_url: 'http://my.cdn.tld/journal-logo.png', journal_cover_url: 'http://my.cdn.tld/journal-cover.jpg', home_url: 'http://www.thejournal.com/', publish_menu_link_html: 'Submit your paper to the The Journal', }) }) describe('getBrandVariationById', function () { it('should reject with an error when the branding variation id is not provided', async function () { await expect( this.BrandVariationsHandler.promises.getBrandVariationById(null) ).to.be.rejected }) it('should reject with an error when the request errors', async function () { this.V1Api.request.callsArgWith(1, new Error()) await expect( this.BrandVariationsHandler.promises.getBrandVariationById('12') ).to.be.rejected }) it('should return branding details when request succeeds', async function () { this.V1Api.request.callsArgWith( 1, null, { statusCode: 200 }, this.mockedBrandVariationDetails ) const brandVariationDetails = await this.BrandVariationsHandler.promises.getBrandVariationById('12') expect(brandVariationDetails).to.deep.equal( this.mockedBrandVariationDetails ) }) it('should transform relative URLs in v1 absolute ones', async function () { this.mockedBrandVariationDetails.logo_url = '/journal-logo.png' this.V1Api.request.callsArgWith( 1, null, { statusCode: 200 }, this.mockedBrandVariationDetails ) const brandVariationDetails = await this.BrandVariationsHandler.promises.getBrandVariationById('12') expect( brandVariationDetails.logo_url.startsWith( this.settings.apis.v1.publicUrl ) ).to.be.true }) it("should sanitize 'submit_button_html'", async function () { this.mockedBrandVariationDetails.submit_button_html = '
AGU Journal' this.V1Api.request.callsArgWith( 1, null, { statusCode: 200 }, this.mockedBrandVariationDetails ) const brandVariationDetails = await this.BrandVariationsHandler.promises.getBrandVariationById('12') expect(brandVariationDetails.submit_button_html).to.equal( '
AGU Journalhello' ) }) it("should sanitize and remove breaks in 'submit_button_html_no_br'", async function () { this.mockedBrandVariationDetails.submit_button_html = 'Submit to
AGU Journal' this.V1Api.request.callsArgWith( 1, null, { statusCode: 200 }, this.mockedBrandVariationDetails ) const brandVariationDetails = await this.BrandVariationsHandler.promises.getBrandVariationById('12') expect(brandVariationDetails.submit_button_html_no_br).to.equal( 'Submit to AGU Journalhello' ) }) }) })