JSFiddle - React, Tailwind, and code Playground

by angstrey

JavaScript

'use strict';

function SubstanceComponentUtil() {
    'ngInject';

    this.componentHasImage = (substanceComponent) => {
        if (hasComponentsList(substanceComponent)) {
            var firstComponent = substanceComponent.components[0];
            if (firstComponent.image) {
                return true;
            }

            return this.componentHasImage(firstComponent);
        }

        return false;
    };

    this.getImagesFromComponent = (substanceComponent) => {
        if (hasComponentsList(substanceComponent)) {
            let firstComponent = substanceComponent.components[0];
            
            if (firstComponent.image) {
                return extractImagesFromComponent(substanceComponent);
            } else if (hasComponentsList(firstComponent)) {
                return extractImagesFromComponent(firstComponent);
            }
        }

        return [];
    };

    function extractImagesFromComponent(substanceComponent) {
        return substanceComponent.components.map(item => item.image);
    }

    function hasComponentsList(substanceComponent) {
        return substanceComponent && substanceComponent.components && substanceComponent.components.length;
    }
}


'use strict';

describe('Substance Component Utility Service', () => {
    var substanceComponentUtil;

    beforeEach(angular.mock.module('scifinder.shared'));

    beforeEach(inject(function(_substanceComponentUtil_) {
        substanceComponentUtil = _substanceComponentUtil_;
    }));

    describe('componentHasImage() method', () => {
        // AC: 369.1-2
        describe('No substance component passed in', () => {
            it('should return false', () => {
                const substanceComponent = null;
                const expectedValue = false;

                expect(substanceComponentUtil.componentHasImage(substanceComponent)).toBe(expectedValue);
            });
        });

        // AC: 369.1-1
        describe('A component with at least one image...