mirror of
				https://github.com/Unleash/unleash.git
				synced 2025-10-27 11:02:16 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			96 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			96 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
'use strict';
 | 
						|
 | 
						|
const test = require('ava');
 | 
						|
const { featureShema } = require('./feature-schema');
 | 
						|
const joi = require('joi');
 | 
						|
 | 
						|
test('should require URL firendly name', t => {
 | 
						|
    const toggle = {
 | 
						|
        name: 'io`dasd',
 | 
						|
        enabled: false,
 | 
						|
        strategies: [{ name: 'default' }],
 | 
						|
    };
 | 
						|
 | 
						|
    const { error } = joi.validate(toggle, featureShema);
 | 
						|
    t.deepEqual(error.details[0].message, '"name" must be URL friendly');
 | 
						|
});
 | 
						|
 | 
						|
test('should be valid toggle name', t => {
 | 
						|
    const toggle = {
 | 
						|
        name: 'app.name',
 | 
						|
        enabled: false,
 | 
						|
        strategies: [{ name: 'default' }],
 | 
						|
    };
 | 
						|
 | 
						|
    const { value } = joi.validate(toggle, featureShema);
 | 
						|
    t.deepEqual(value, toggle);
 | 
						|
});
 | 
						|
 | 
						|
test('should strip extra variant fields', t => {
 | 
						|
    const toggle = {
 | 
						|
        name: 'app.name',
 | 
						|
        enabled: false,
 | 
						|
        strategies: [{ name: 'default' }],
 | 
						|
        variants: [
 | 
						|
            {
 | 
						|
                name: 'variant-a',
 | 
						|
                weight: 1,
 | 
						|
                unkown: 'not-allowed',
 | 
						|
            },
 | 
						|
        ],
 | 
						|
    };
 | 
						|
 | 
						|
    const { value } = joi.validate(toggle, featureShema);
 | 
						|
    t.notDeepEqual(value, toggle);
 | 
						|
    t.falsy(value.variants[0].unkown);
 | 
						|
});
 | 
						|
 | 
						|
test('should be possible to define variant overrides', t => {
 | 
						|
    const toggle = {
 | 
						|
        name: 'app.name',
 | 
						|
        enabled: false,
 | 
						|
        strategies: [{ name: 'default' }],
 | 
						|
        variants: [
 | 
						|
            {
 | 
						|
                name: 'variant-a',
 | 
						|
                weight: 1,
 | 
						|
                overrides: [
 | 
						|
                    {
 | 
						|
                        contextName: 'userId',
 | 
						|
                        values: ['123'],
 | 
						|
                    },
 | 
						|
                ],
 | 
						|
            },
 | 
						|
        ],
 | 
						|
    };
 | 
						|
 | 
						|
    const { value, error } = joi.validate(toggle, featureShema);
 | 
						|
    t.deepEqual(value, toggle);
 | 
						|
    t.falsy(error);
 | 
						|
});
 | 
						|
 | 
						|
test('variant overrides must have corect shape', async t => {
 | 
						|
    t.plan(1);
 | 
						|
    const toggle = {
 | 
						|
        name: 'app.name',
 | 
						|
        enabled: false,
 | 
						|
        strategies: [{ name: 'default' }],
 | 
						|
        variants: [
 | 
						|
            {
 | 
						|
                name: 'variant-a',
 | 
						|
                weight: 1,
 | 
						|
                overrides: {
 | 
						|
                    userId: ['not-alloed'],
 | 
						|
                    sessionId: ['not-alloed'],
 | 
						|
                },
 | 
						|
            },
 | 
						|
        ],
 | 
						|
    };
 | 
						|
 | 
						|
    try {
 | 
						|
        await joi.validate(toggle, featureShema);
 | 
						|
    } catch (error) {
 | 
						|
        t.is(error.details[0].message, '"overrides" must be an array');
 | 
						|
    }
 | 
						|
});
 |