Skip to content
Snippets Groups Projects
Commit 65ee734d authored by Tifenn Guillas's avatar Tifenn Guillas
Browse files

Tests => DONE

parent 514ea590
No related branches found
No related tags found
2 merge requests!147Develop,!140Resolve "Admin option for search module"
......@@ -12,17 +12,17 @@
<span class="fas fa-home"></span> Home
</a>
</li>
<li *ngIf="isSearchAllowed()" class="nav-item">
<li *ngIf="isSearchAllowed()" id="search_link" class="nav-item">
<a class="nav-link" routerLink="/search" routerLinkActive="active">
<span class="fas fa-search"></span> Search
</a>
</li>
<li *ngIf="isSearchMultipleAllowed()" class="nav-item">
<li *ngIf="isSearchMultipleAllowed()" id="search_multiple_link" class="nav-item">
<a class="nav-link" routerLink="/search-multiple" routerLinkActive="active">
<span class="fas fa-search-plus"></span> Search multiple
</a>
</li>
<li *ngIf="isDocumentationAllowed()" class="nav-item">
<li *ngIf="isDocumentationAllowed()" id="documentation_link" class="nav-item">
<a class="nav-link" routerLink="/documentation" routerLinkActive="active">
<span class="fas fa-question"></span> Documentation
</a>
......
......@@ -49,5 +49,130 @@ describe('[Core] Component: NavComponent', () => {
it('raises the logout event when clicked', () => {
component.logout.subscribe((event) => expect(event).toBe(undefined));
component.emitLogout();
});
});
it('should display search, search multiple and documentation links if instance config allows it', () => {
component.instance = {
name: 'toto',
label: 'Toto',
client_url: '',
nb_dataset_families: 1,
nb_datasets: 1,
config: {
search: true,
search_multiple: true,
documentation: true
}
};
fixture.detectChanges();
const template = fixture.nativeElement;
expect(template.querySelector('#search_link')).toBeTruthy();
expect(template.querySelector('#search_multiple_link')).toBeTruthy();
expect(template.querySelector('#documentation_link')).toBeTruthy();
});
it('should not display search, search multiple and documentation links if instance config don\'t allows it', () => {
component.instance = {
name: 'toto',
label: 'Toto',
client_url: '',
nb_dataset_families: 1,
nb_datasets: 1,
config: {
search: false,
search_multiple: false,
documentation: false
} };
fixture.detectChanges();
const template = fixture.nativeElement;
expect(template.querySelector('#search_link')).toBeFalsy();
expect(template.querySelector('#search_multiple_link')).toBeFalsy();
expect(template.querySelector('#documentation_link')).toBeFalsy();
});
it('#isSearchAllowed() return if search link has to be displayed', () => {
component.instance = {
name: 'toto',
label: 'Toto',
client_url: '',
nb_dataset_families: 1,
nb_datasets: 1,
config: {
search: true,
search_multiple: false,
documentation: false
}
};
expect(component.isSearchAllowed()).toBeTruthy();
component.instance = {
name: 'toto',
label: 'Toto',
client_url: '',
nb_dataset_families: 1,
nb_datasets: 1,
config: {
search: false,
search_multiple: false,
documentation: false
} };
expect(component.isSearchAllowed()).toBeFalsy();
});
it('#isSearchMultipleAllowed() return if search multiple link has to be displayed', () => {
component.instance = {
name: 'toto',
label: 'Toto',
client_url: '',
nb_dataset_families: 1,
nb_datasets: 1,
config: {
search: true,
search_multiple: true,
documentation: false
}
};
expect(component.isSearchMultipleAllowed()).toBeTruthy();
component.instance = {
name: 'toto',
label: 'Toto',
client_url: '',
nb_dataset_families: 1,
nb_datasets: 1,
config: {
search: true,
search_multiple: false,
documentation: false
}
};
expect(component.isSearchMultipleAllowed()).toBeFalsy();
});
it('#isDocumentationAllowed() return if documentation link has to be displayed', () => {
component.instance = {
name: 'toto',
label: 'Toto',
client_url: '',
nb_dataset_families: 1,
nb_datasets: 1,
config: {
search: true,
search_multiple: true,
documentation: true
}
};
expect(component.isDocumentationAllowed()).toBeTruthy();
component.instance = {
name: 'toto',
label: 'Toto',
client_url: '',
nb_dataset_families: 1,
nb_datasets: 1,
config: {
search: true,
search_multiple: true,
documentation: false
}
};
expect(component.isDocumentationAllowed()).toBeFalsy();
});
});
......@@ -8,6 +8,8 @@ import { AppComponent } from './app.component';
import * as fromLogin from '../../login/store/login.reducer';
import * as loginActions from '../../login/store/login.action';
import { LoginToken } from '../../login/store/model';
import * as fromMetamodel from '../../metamodel/reducers';
import * as instanceActions from '../../metamodel/action/instance.action';
describe('[Core] Container: AppComponent', () => {
@Component({ selector: 'app-nav', template: '' })
......@@ -20,7 +22,8 @@ describe('[Core] Container: AppComponent', () => {
let fixture: ComponentFixture<AppComponent>;
let store: MockStore;
const initialState = {
login: { ...fromLogin.initialState }
login: { ...fromLogin.initialState },
metamodel: { ...fromMetamodel }
};
beforeEach(async(() => {
......@@ -45,10 +48,12 @@ describe('[Core] Container: AppComponent', () => {
it('should execute ngOnInit lifecycle', () => {
const loginLocalStorageAction = new loginActions.LoginLocalStorageAction();
const loadInstanceMetaAction = new instanceActions.LoadInstanceMetaAction();
const spy = spyOn(store, 'dispatch');
component.ngOnInit();
expect(spy).toHaveBeenCalledTimes(1);
expect(spy).toHaveBeenCalledTimes(2);
expect(spy).toHaveBeenCalledWith(loginLocalStorageAction);
expect(spy).toHaveBeenCalledWith(loadInstanceMetaAction);
});
it('#logout() should dispatch LogoutAction', () => {
......
......@@ -25,11 +25,11 @@ interface StoreState {
encapsulation: ViewEncapsulation.None
})
export class AppComponent implements OnInit {
anisClientVersion: string = VERSIONS.anisClient;
year = (new Date()).getFullYear();
isAuthenticated: Observable<boolean>;
loginToken: Observable<LoginToken>;
instance: Observable<Instance>;
public anisClientVersion: string = VERSIONS.anisClient;
public year = (new Date()).getFullYear();
public isAuthenticated: Observable<boolean>;
public loginToken: Observable<LoginToken>;
public instance: Observable<Instance>;
constructor(private store: Store<StoreState>) {
this.isAuthenticated = store.select(loginSelector.isAuthenticated);
......
import * as instanceActions from './instance.action';
import { Instance } from '../model';
describe('[Metamodel] Instance action', () => {
it('should create LoadInstanceMetaAction', () => {
const action = new instanceActions.LoadInstanceMetaAction();
expect(action.type).toEqual(instanceActions.LOAD_INSTANCE_META);
});
it('should create LoadDatasetSearchMetaSuccessAction', () => {
const payload: Instance = {
name: 'toto',
label: 'Toto',
client_url: '',
nb_dataset_families: 1,
nb_datasets: 1,
config: {
search: true,
search_multiple: true,
documentation: true
}
};
const action = new instanceActions.LoadInstanceMetaSuccessAction(payload);
expect(action.type).toEqual(instanceActions.LOAD_INSTANCE_META_SUCCESS);
expect(action.payload).toEqual(payload);
});
it('should create LoadDatasetSearchMetaFailAction', () => {
const action = new instanceActions.LoadInstanceMetaFailAction();
expect(action.type).toEqual(instanceActions.LOAD_INSTANCE_META_FAIL);
});
});
import * as fromInstance from './instance.reducer';
import * as instanceActions from '../action/instance.action';
import { Instance } from '../model';
describe('[Metamodel] Instance reducer', () => {
it('should return init state', () => {
const { initialState } = fromInstance;
const action = {} as instanceActions.Actions;
const state = fromInstance.reducer(undefined, action);
expect(state).toBe(initialState);
});
it('should set instance', () => {
const instance: Instance = {
name: 'toto',
label: 'Toto',
client_url: '',
nb_dataset_families: 1,
nb_datasets: 1,
config: {
search: true,
search_multiple: true,
documentation: true
}
};
const { initialState } = fromInstance;
const action = new instanceActions.LoadInstanceMetaSuccessAction(instance);
const state = fromInstance.reducer(initialState, action);
expect(state.instance).toEqual(instance);
expect(state).not.toEqual(initialState);
});
it('should get instance', () => {
const action = {} as instanceActions.Actions;
const state = fromInstance.reducer(undefined, action);
expect(fromInstance.getInstance(state)).toBeNull();
});
});
......@@ -11,29 +11,15 @@ export const initialState: State = {
export function reducer(state: State = initialState, action: actions.Actions): State {
switch (action.type) {
// case actions.LOAD_DATASET_SEARCH_META_WIP:
// return {
// ...state,
// datasetSearchMetaIsLoading: true
// };
case actions.LOAD_INSTANCE_META_SUCCESS:
return {
...state,
instance: action.payload
};
// case actions.LOAD_DATASET_SEARCH_META_FAIL:
// return {
// ...state,
// datasetSearchMetaIsLoading: false
// };
default:
return state;
}
}
// export const getDatasetSearchMetaIsLoading = (state: State) => state.datasetSearchMetaIsLoading;
// export const getDatasetSearchMetaIsLoaded = (state: State) => state.datasetSearchMetaIsLoaded;
export const getInstance = (state: State) => state.instance;
import * as instanceSelector from './instance.selector';
import * as fromInstance from '../reducers/instance.reducer';
describe('[Metamodel] Instance selector', () => {
it('should get instance', () => {
const state = { metamodel: { instance: { ...fromInstance.initialState }}};
expect(instanceSelector.getInstance(state)).toBeNull();
});
});
\ No newline at end of file
......@@ -8,16 +8,6 @@ export const getInstanceState = createSelector(
(state: metamodel.State) => state.instance
);
// export const getInstanceMetaIsLoading = createSelector(
// getDatasetState,
// dataset.getDatasetSearchMetaIsLoading
// );
//
// export const getDatasetSearchMetaIsLoaded = createSelector(
// getDatasetState,
// dataset.getDatasetSearchMetaIsLoaded
// );
export const getInstance = createSelector(
getInstanceState,
instance.getInstance
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment