blob: dc18b69133aa99f8a2a05bcfe3135dd8c96d3c13 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import {assert} from 'chai';
import {spy} from 'sinon';
import {of, throwError} from 'rxjs';
import {TestScheduler} from 'rxjs/testing';
const mocks = () => new Map([
['IgniteConfigurationResource', {}],
['$state', {}],
['ConfigureState', {}],
['Clusters', {}]
]);
import {REMOVE_CLUSTERS_LOCAL_REMOTE, CLONE_CLUSTERS} from './PageConfigure';
import PageConfigure from './PageConfigure';
import {REMOVE_CLUSTERS, LOAD_LIST, ADD_CLUSTERS, UPDATE_CLUSTER} from '../store/reducer';
suite.skip('PageConfigure service', () => {
suite('cloneCluster$ effect', () => {
test('successfull clusters clone', () => {
const testScheduler = new TestScheduler((...args) => assert.deepEqual(...args));
const values = {
s: {
list: {
clusters: new Map([
[1, {_id: 1, name: 'Cluster 1'}],
[2, {_id: 2, name: 'Cluster 1 (clone)'}]
])
}
},
a: {
type: CLONE_CLUSTERS,
clusters: [
{_id: 1, name: 'Cluster 1'},
{_id: 2, name: 'Cluster 1 (clone)'}
]
},
b: {
type: ADD_CLUSTERS,
clusters: [
{_id: -1, name: 'Cluster 1 (clone) (1)'},
{_id: -2, name: 'Cluster 1 (clone) (clone)'}
]
},
c: {
type: UPDATE_CLUSTER,
_id: -1,
cluster: {_id: 99}
},
d: {
type: UPDATE_CLUSTER,
_id: -2,
cluster: {_id: 99}
}
};
const actions = '-a----';
const state = 's-----';
const output = '-(bcd)';
const deps = mocks()
.set('Clusters', {
saveCluster$: (c) => of({data: 99})
})
.set('ConfigureState', {
actions$: testScheduler.createHotObservable(actions, values),
state$: testScheduler.createHotObservable(state, values),
dispatchAction: spy()
});
const s = new PageConfigure(...deps.values());
testScheduler.expectObservable(s.cloneClusters$).toBe(output, values);
testScheduler.flush();
assert.equal(s.ConfigureState.dispatchAction.callCount, 3);
});
test('some clusters clone failure', () => {
const testScheduler = new TestScheduler((...args) => assert.deepEqual(...args));
const values = {
s: {
list: {
clusters: new Map([
[1, {_id: 1, name: 'Cluster 1'}],
[2, {_id: 2, name: 'Cluster 1 (clone)'}]
])
}
},
a: {
type: CLONE_CLUSTERS,
clusters: [
{_id: 1, name: 'Cluster 1'},
{_id: 2, name: 'Cluster 1 (clone)'}
]
},
b: {
type: ADD_CLUSTERS,
clusters: [
{_id: -1, name: 'Cluster 1 (clone) (1)'},
{_id: -2, name: 'Cluster 1 (clone) (clone)'}
]
},
c: {
type: UPDATE_CLUSTER,
_id: -1,
cluster: {_id: 99}
},
d: {
type: REMOVE_CLUSTERS,
clusterIDs: [-2]
}
};
const actions = '-a----';
const state = 's-----';
const output = '-(bcd)';
const deps = mocks()
.set('Clusters', {
saveCluster$: (c) => c.name === values.b.clusters[0].name
? of({data: 99})
: throwError()
})
.set('ConfigureState', {
actions$: testScheduler.createHotObservable(actions, values),
state$: testScheduler.createHotObservable(state, values),
dispatchAction: spy()
});
const s = new PageConfigure(...deps.values());
testScheduler.expectObservable(s.cloneClusters$).toBe(output, values);
testScheduler.flush();
assert.equal(s.ConfigureState.dispatchAction.callCount, 3);
});
});
suite('removeCluster$ effect', () => {
test('successfull clusters removal', () => {
const testScheduler = new TestScheduler((...args) => assert.deepEqual(...args));
const values = {
a: {
type: REMOVE_CLUSTERS_LOCAL_REMOTE,
clusters: [1, 2, 3, 4, 5].map((i) => ({_id: i}))
},
b: {
type: REMOVE_CLUSTERS,
clusterIDs: [1, 2, 3, 4, 5]
},
c: {
type: LOAD_LIST,
list: []
},
d: {
type: REMOVE_CLUSTERS,
clusterIDs: [1, 2, 3, 4, 5]
},
s: {
list: []
}
};
const actions = '-a';
const state = 's-';
const output = '-d';
const deps = mocks()
.set('ConfigureState', {
actions$: testScheduler.createHotObservable(actions, values),
state$: testScheduler.createHotObservable(state, values),
dispatchAction: spy()
})
.set('Clusters', {
removeCluster$: (v) => of(v)
});
const s = new PageConfigure(...deps.values());
testScheduler.expectObservable(s.removeClusters$).toBe(output, values);
testScheduler.flush();
assert.equal(s.ConfigureState.dispatchAction.callCount, 1);
});
test('some clusters removal failure', () => {
const testScheduler = new TestScheduler((...args) => assert.deepEqual(...args));
const values = {
a: {
type: REMOVE_CLUSTERS_LOCAL_REMOTE,
clusters: [1, 2, 3, 4, 5].map((i) => ({_id: i}))
},
b: {
type: REMOVE_CLUSTERS,
clusterIDs: [1, 2, 3, 4, 5]
},
c: {
type: LOAD_LIST,
list: []
},
d: {
type: REMOVE_CLUSTERS,
clusterIDs: [1, 3, 5]
},
s: {
list: []
}
};
const actions = '-a----';
const state = 's-----';
const output = '-(bcd)';
const deps = mocks()
.set('ConfigureState', {
actions$: testScheduler.createHotObservable(actions, values),
state$: testScheduler.createHotObservable(state, values),
dispatchAction: spy()
})
.set('Clusters', {
removeCluster$: (v) => v._id % 2 ? of(v) : throwError()
});
const s = new PageConfigure(...deps.values());
testScheduler.expectObservable(s.removeClusters$).toBe(output, values);
testScheduler.flush();
assert.equal(s.ConfigureState.dispatchAction.callCount, 3);
});
});
});