Github user stevengill commented on a diff in the pull request:

    https://github.com/apache/cordova-lib/pull/584#discussion_r137442765
  
    --- Diff: spec/cordova/plugin/save.spec.js ---
    @@ -54,15 +62,131 @@ describe('cordova/plugin/save', function () {
             });
         });
         describe('happy path', function () {
    -        it('should remove all plugins from config.xml and re-add new ones 
based on those retrieved from fetch.json');
    -        it('should only add top-level plugins to config.xml');
    -        it('should write individual plugin specs to config.xml');
    -        it('should write individual plugin variables to config.xml');
    +        it('check that existing plugins are getting removed', function 
(done) {
    +            save(projectRoot).then(function () {
    +                
expect(cfg_parser_mock.prototype.removePlugin).toHaveBeenCalledWith('VRPlugin');
    +                
expect(cfg_parser_mock.prototype.removePlugin).toHaveBeenCalledWith('MastodonSocialPlugin');
    +            }).fail(function (e) {
    +                expect(e).toBeUndefined();
    +                fail('did not expect fail handler to be invoked');
    +            }).done(done);
    +        });
    +
    +        it('plugins are being removed first and then only top level 
plugins are being restored', function (done) {
    +            var fake_fetch_json =
    +                {'VRPlugin': {'source': {
    +                    'type': 'registry',
    +                    'id': 'id'
    +                },
    +                'is_top_level': true
    +                },
    +                'MastodonSocialPlugin': { 'source': {
    +                    'type': 'registry',
    +                    'id': 'id'
    +                },
    +                'is_top_level': false }};
    +
    +            
fs.readFileSync.and.returnValue(JSON.stringify(fake_fetch_json));
    +            save(projectRoot).then(function () {
    +                
expect(cfg_parser_mock.prototype.removePlugin).toHaveBeenCalledWith('VRPlugin');
    +                
expect(cfg_parser_mock.prototype.removePlugin).toHaveBeenCalledWith('MastodonSocialPlugin');
    +                
expect(cfg_parser_mock.prototype.addPlugin).toHaveBeenCalledWith(Object({ name: 
'VRPlugin' }), [ ]);
    +                
expect(cfg_parser_mock.prototype.addPlugin).not.toHaveBeenCalledWith(Object({ 
name: 'MastodonSocialPlugin' }), [ ]);
    +                expect(cfg_parser_mock.prototype.write).toHaveBeenCalled();
    +            }).fail(function (e) {
    +                expect(e).toBeUndefined();
    +                fail('did not expect fail handler to be invoked');
    +            }).done(done);
    +        });
    +
    +        it('should write individual plugin specs to config.xml', function 
(done) {
    +            var fake_fetch_json =
    +                {'VRPlugin': {'source': {
    +                    'type': 'registry',
    +                    'id': 'id'
    +                },
    +                'is_top_level': true }};
    +            
fs.readFileSync.and.returnValue(JSON.stringify(fake_fetch_json));
    +            spyOn(save, 'getSpec').and.returnValue('1.0.0');
    +            save(projectRoot).then(function () {
    +                
expect(cfg_parser_mock.prototype.addPlugin).toHaveBeenCalledWith(Object({ name: 
'VRPlugin', spec: '1.0.0' }), jasmine.any(Object));
    +                expect(cfg_parser_mock.prototype.write).toHaveBeenCalled();
    +            }).fail(function (e) {
    +                expect(e).toBeUndefined();
    +                fail('did not expect fail handler to be invoked');
    +            }).done(done);
    +        });
    +
    +        it('should write individual plugin variables to config.xml', 
function (done) {
    +            var fake_fetch_json =
    +                {'VRPlugin': {'source': {
    +                    'type': 'registry',
    +                    'id': 'id'
    +                },
    +                'is_top_level': true,
    +                'variables': {
    +                    'var 1': ' '
    +                }}};
    +            
fs.readFileSync.and.returnValue(JSON.stringify(fake_fetch_json));
    +            save(projectRoot).then(function () {
    +                
expect(cfg_parser_mock.prototype.addPlugin).toHaveBeenCalledWith(jasmine.any(Object),
 [ Object({ name: 'var 1', value: ' ' }) ]);
    +                expect(cfg_parser_mock.prototype.write).toHaveBeenCalled();
    +            }).fail(function (e) {
    +                expect(e).toBeUndefined();
    +                fail('did not expect fail handler to be invoked');
    +            }).done(done);
    +        });
         });
         describe('getSpec helper method', function () {
    -        it('should return a plugin source\'s url or path property 
immediately');
    -        it('should return a version if a version was provided to plugin 
id');
    -        it('should return a version that includes scope if scope was part 
of plugin id');
    -        it('should fall back to using PluginInfoProvider to retrieve a 
version as last resort');
    +        it('should return a plugin source\'s url or path property 
immediately', function () {
    +            spyOn(save, 'getSpec').and.callThrough();
    +            save.getSpec({ url: 
'https://git-wip-us.apache.org/repos/asf/cordova-plugin-camera.git' }, 
'/some/path', 'VRPlugin');
    +            expect(save.getSpec).toHaveBeenCalledWith(Object({ url: 
'https://git-wip-us.apache.org/repos/asf/cordova-plugin-camera.git' }), 
'/some/path', 'VRPlugin');
    +            expect(save.getSpec({ url: 
'https://git-wip-us.apache.org/repos/asf/cordova-plugin-camera.git' }, 
'/some/path', 
'VRPlugin')).toEqual('https://git-wip-us.apache.org/repos/asf/cordova-plugin-camera.git');
    +        });
    +
    +        it('getSpec should return a version if a version was provided to 
plugin id', function () {
    +            save.versionString.and.callThrough();
    +            expect(save.getSpec({id: 'cordova-plugin-camera@^1.1.0'}, 
'/some/path', 'cordova-plugin-camera')).toEqual('^1.1.0');
    +        });
    +
    +        it('should return a version that includes scope if scope was part 
of plugin id', function () {
    +            save.versionString.and.callThrough();
    +            expect(save.getSpec({ type: 'registry', id: 
'@scoped/package@^1.0.0' }, '/some/path', 
'cordova-plugin-camera')).toEqual('@scoped/package@^1.0.0');
    +        });
    +
    +        it('should fall back to using PluginInfoProvider to retrieve a 
version as last resort', function () {
    +            expect(save.getSpec({ id: 'cordova-plugin-camera' }, 
'/some/path', 'cordova-plugin-camera')).toEqual(null);
    +            
expect(plugin_info_provider_mock.prototype.get).toHaveBeenCalled();
    +        });
    +    });
    +
    +    describe('getPluginVariables helper method', function () {
    +        it('if no variables are passed in, should return empty', function 
() {
    +            expect(save.getPluginVariables()).toEqual([]);
    +        });
    +        it('if variables are passed in, should return result & get added 
to name and value', function () {
    +            expect(save.getPluginVariables({ variable: 'var 1' 
})).toEqual([ { name: 'variable', value: 'var 1' } ]);
    +        });
    +    });
    +
    +    describe('versionString helper method', function () {
    +        it('if no version, should return null', function () {
    +            save.versionString.and.callThrough();
    +            spyOn(semver, 'valid').and.returnValue('', false);
    +            spyOn(semver, 'validRange').and.returnValue('', false);
    --- End diff --
    
    set the returnValue for 176 and 177 to `null`


---

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@cordova.apache.org
For additional commands, e-mail: dev-h...@cordova.apache.org

Reply via email to