'use strict';

const test = require('ava');
const mapper = require('./legacy-feature-mapper');

test('adds old fields to feature', t => {
    const feature = {
        name: 'test',
        enabled: 0,
        strategies: [{
            name: 'default',
            parameters: {
                val: 'bar',
            },
        }],
    };

    const mappedFeature = mapper.addOldFields(feature);

    t.true(mappedFeature.name === feature.name);
    t.true(mappedFeature.enabled === feature.enabled);
    t.true(mappedFeature.strategy === feature.strategies[0].name);
    t.true(mappedFeature.parameters !== feature.strategies[0].parameters);
    t.deepEqual(mappedFeature.parameters, feature.strategies[0].parameters);
});

test('adds old fields to feature handles missing strategies field', t => {
    const feature = {
        name: 'test',
        enabled: 0,
    };

    const mappedFeature = mapper.addOldFields(feature);

    t.true(mappedFeature.name === feature.name);
    t.true(mappedFeature.enabled === feature.enabled);
    t.true(mappedFeature.strategies.length === 0);
});

test('transforms fields to new format', t => {
    const feature = {
        name: 'test',
        enabled: 0,
        strategy: 'default',
        parameters: {
            val: 'bar',
        },
    };

    const mappedFeature = mapper.toNewFormat(feature);

    t.true(mappedFeature.name === feature.name);
    t.true(mappedFeature.enabled === feature.enabled);
    t.true(mappedFeature.strategies.length === 1);
    t.true(mappedFeature.strategies[0].name === feature.strategy);
    t.deepEqual(mappedFeature.strategies[0].parameters, feature.parameters);
    t.true(mappedFeature.strategy === undefined);
    t.true(mappedFeature.parameters === undefined);
});

test('should not transform if it already is the new format', t => {
    const feature = {
        name: 'test',
        enabled: 0,
        description: 'test',
        createdAt: new Date(),
        strategies: [{
            name: 'default',
            parameters: {
                val: 'bar',
            },
        }],
    };

    const mappedFeature = mapper.toNewFormat(feature);

    t.deepEqual(mappedFeature, feature);
});