| // Copyright 2015 The Vanadium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| var test = require('prova'); |
| var mercury = require('mercury'); |
| var proxyquire = require('proxyquireify')(require); |
| var browseComponent = proxyquire('../../../../src/components/browse/index', { |
| './item-details/index': itemDetailsComponentMock |
| }); |
| |
| /* |
| * Create mocks for namespaceService used by browseNamespace. |
| * One mock that resolves in both glob and signature methods. |
| * One mock that rejects in both glob and signature methods. |
| */ |
| var mockItem = { |
| mountedName: 'mockItem', |
| objectName: 'foo/bar/mockItem', |
| isLeaf: true, |
| hasServer: true, |
| hasMountPoint: true |
| }; |
| |
| var namespaceServiceMock = { |
| isGlobbable: function(name) { |
| return Promise.resolve(true); |
| }, |
| search: function(name, globQuery) { |
| return Promise.resolve(mercury.array([mockItem])); |
| } |
| }; |
| |
| function itemDetailsComponentMock() { |
| return { |
| state: {}, |
| events: { |
| displayItemDetails: function(data) { |
| return; |
| } |
| } |
| }; |
| } |
| |
| // Require the browseNamespace using the proxy so mock is used |
| var browseNamespace = |
| proxyquire('../../../../src/components/browse/browse-namespace',{ |
| '../../services/namespace/service': namespaceServiceMock |
| }); |
| |
| test('Updates state.namespace', function(t) { |
| t.plan(4); |
| |
| var state = browseComponent().state; |
| var events = browseComponent().events; |
| |
| // Should update state.namespace with data.namespace |
| browseNamespace(state, events, { |
| namespace: 'foo/bar' |
| }); |
| t.equal(state.namespace(), 'foo/bar'); |
| |
| // Should reset state.namespace if data.namespace is null |
| browseNamespace(state, events, { |
| namespace: null |
| }); |
| t.equal(state.namespace(), ''); |
| |
| // Should reset state.namespace if data.namespace is undefined |
| browseNamespace(state, events, {}); |
| t.equal(state.namespace(), ''); |
| |
| // Should update state.namespace if data.namespace is empty string |
| browseNamespace(state, events, { |
| namespace: '' |
| }); |
| t.equal(state.namespace(), ''); |
| }); |
| |
| test('Updates state.globQuery', function(t) { |
| t.plan(4); |
| |
| var state = browseComponent().state; |
| var events = browseComponent().events; |
| |
| // Should update state.globQuery with data.globQuery |
| browseNamespace(state, events, { |
| globQuery: '**/*' |
| }); |
| t.equal(state.globQuery(), '**/*'); |
| |
| // Should reset state.globQuery if data.globQuery is null |
| browseNamespace(state, events, { |
| globQuery: null |
| }); |
| t.equal(state.globQuery(), ''); |
| |
| // Should reset state.globQuery if data.globQuery is undefined |
| browseNamespace(state, events, {}); |
| t.equal(state.globQuery(), ''); |
| |
| // Empty glob keeps it empty in the state but behind the scenes does a '*' |
| browseNamespace(state, events, { |
| globQuery: '' |
| }); |
| t.equal(state.globQuery(), ''); |
| }); |