Inlife/nexrender

View on GitHub
packages/nexrender-core/src/tasks/script/EnhancedScript.spec.js

Summary

Maintainability
A
0 mins
Test Coverage
// simple syntax test
const path = require('path')
const fs = require('fs')
const os = require("os");
const chai = require('chai')
const expect = chai.expect

describe('tasks/script/EnhancedScript', () => {
    const EnhancedScript = require('./EnhancedScript')

    const testJsxFilePath = path.join(os.tmpdir(), 'unittest.jsx')

    it("Finds parameters in jsx with missing values in json and injects", () => {
        fs.writeFileSync(testJsxFilePath,`
        /* var c = NX.get('unittest_undefined_parameter_multi_line_comment')
        */
        // var d = NX.get('unittest_undefined_parameter_single_line_comment')
        var a = NX.get('unittest_undefined_parameter')
        var b = NX.get('unittest_defined_parameter')
    `);

    const enhancedScript = new EnhancedScript(testJsxFilePath, 'src', [
        {
            key: 'unittest_defined_parameter',
            value: 'VALUE'
        },
    ], 'NX', {}, 'unittest', { log: () => {} });

        const anyMissing = enhancedScript.findMissingMatchesInJSX();
        expect(anyMissing).true;
        expect(enhancedScript.missingJSONParams.map((o) => { return o.key})).to.have.members(['unittest_undefined_parameter'])

        expect(enhancedScript.injectParameters()).to.equal(
            [`NX.set('unittest_defined_parameter', "VALUE");`,
            `NX.set('unittest_undefined_parameter', undefined);`].join('\n'));

    })

    it("injects functions and functions with arguments", () => {

        //FIXME: NX.get('unittest_undefined_function', 'arg1')  is currently not found and no warning is given
        fs.writeFileSync(testJsxFilePath,`
            var a = NX.get('unittest_undefined_function', 'arg1') 
            var b = NX.get('eventInvitation')
        `);

        const enhancedScript = new EnhancedScript(testJsxFilePath, 'src', [
            {
                "key" : "invitees",
                "value": ["Steve", "Natasha", "Tony", "Bruce", "Wanda", "Thor", "Peter", "Clint" ]
            },
            {
                "key" : "eventInvitation",
                "value": `(function (venue) { alert( 'This years' Avengers Gala is on the prestigious ' + venue.name + ' located at ' + venue.location + '. Our special guests ' + NX.get('invitees').value.map(function (a, i) { return (i == NX.get('invitees').value.length - 1) ? ' and ' + a + ' (whoever that is)' : a + ', '; }).join('') + '  going to be present for the ceremony!');
        })({ name: NX.arg('venue'), location: NX.arg('location') })`,
                "arguments": [
                    {
                        "key" : "venue",
                        "value" : "Smithsonian Museum of Natural History"
                    },
                    {
                        "key" : "location",
                        "value": "10th St. & Constitution Ave."
                    },
                ]
            },
            {
                "type": "array",
                "key" : "dogs",
                "value": [ "Captain Sparkles", "Summer", "Neptune"]
            },
            {
                "type" : "number",
                "key" : "anAmount"
            },
            {
                "type": "function",
                "key": "getDogsCount",
                "value" : "function() { return NX.get('dogs').length; }"
            },
            {
                "type": "function",
                "key": "exampleFn",
                "value": "function ( parameter ) { return parameter; }"
            },
            {
                "type" : "function",
                "key" : "dogCount",
                "value" : "(function(length) { return length })(NX.arg('dogCount'))",
                "arguments": [
                    {
                        "key" : "dogCount",
                        "value": ["NX.call('exampleFn', [NX.call('getDogsCount') + NX.get('anAmount')])"]
                    }
                ]
            }
        ], 'NX', {}, 'unittest', { log: () => {} });

        const anyMissing = enhancedScript.findMissingMatchesInJSX();
        expect(anyMissing).false;

        const injected = enhancedScript.injectParameters();

        expect(injected).to.equal([
            `NX.set('invitees', ["Steve","Natasha","Tony","Bruce","Wanda","Thor","Peter","Clint"]);`,
            `NX.set('eventInvitation', (function (venue) { alert( 'This years' Avengers Gala is on the prestigious ' + venue.name + ' located at ' + venue.location + '. Our special guests ' + NX.get('invitees').value.map(function (a, i) { return (i == NX.get('invitees').value.length - 1) ? ' and ' + a + ' (whoever that is)' : a + ', '; }).join('') + '  going to be present for the ceremony!');
        })({ name: NX.arg('venue'), location:10th St. & Constitution Ave. }));`,
            `NX.set('dogs', ["Captain Sparkles","Summer","Neptune"]);`,
            `NX.set('anAmount', undefined);`,
            `NX.set('getDogsCount', function() { return NX.get('dogs').length; });`,
            `NX.set('exampleFn', function ( parameter ) { return parameter; });`,
            `NX.set('dogCount', (function(length) { return length })(NX.call('exampleFn', [NX.call('getDogsCount') + NX.get('anAmount')])));`
        ].join('\n'))
    })
})