blob: b15e3455f53d246ff6f69ed08a48dfa8e1c29baa [file] [log] [blame]
// Licensed 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 {
getPseudoSchema,
getPrioritizedFields,
sortByTwoFields,
getNotSelectedFields,
getMetaDataTableView,
getFullTableViewData
} from '../index-results/helpers/table-view';
describe('Docs Table View', () => {
const docs = [
{
_id: "badger",
_rev: "8-db03387de9cbd5c2814523b043566dfe",
wiki_page: "http://en.wikipedia.org/wiki/Badger",
min_weight: 7,
max_weight: 30,
min_length: 0.6,
max_length: 0.9,
latin_name: "Meles meles",
class: "mammal",
diet: "omnivore",
test: "xyz"
},
{
_id: "aardvark",
_rev: "5-717f5e88689af3ad191b47321de10c95",
min_weight: 40,
max_weight: 65,
min_length: 1,
max_length: 2.2,
latin_name: "Orycteropus afer",
wiki_page: "http://en.wikipedia.org/wiki/Aardvark",
class: "mammal",
diet: "omnivore",
foo: "bar"
}
];
const schema = [
'_id',
'_rev',
'wiki_page',
'min_weight',
'max_weight',
'min_length',
'max_length',
'latin_name',
'class',
'diet',
'test',
'foo'
];
describe('getPseudoSchema', () => {
it('returns array of unique keys with _id as the first element', () => {
expect(getPseudoSchema(docs)).toEqual(schema);
});
});
describe('getPrioritizedFields', () => {
it('returns the list of most popular attributes', () => {
const max = 5;
expect(getPrioritizedFields(docs, max)).toEqual([
'_id',
'class',
'diet',
'latin_name',
'max_length'
]);
});
});
describe('sortByTowFields', () => {
it('returns proper sorted array for the input', () => {
const input = [[2, 'b'], [3, 'z'], [1, 'a'], [3, 'a']];
expect(sortByTwoFields(input)).toEqual([
[3, 'a'],
[3, 'z'],
[2, 'b'],
[1, 'a']
]);
});
});
describe('getNotSelectedFields', () => {
it('returns a list of the remaining fields not currently selected', () => {
const selectedFields = ['_id', 'class', 'diet', 'latin_name', 'max_length'];
const allFields = ['_id', '_rev', 'wiki_page', 'min_weight', 'max_weight', 'min_length', 'max_length', 'latin_name', 'class', 'diet', 'test', 'foo'];
expect(getNotSelectedFields(selectedFields, allFields)).toEqual([
'_rev',
'wiki_page',
'min_weight',
'max_weight',
'min_length',
'test',
'foo'
]);
});
});
describe('getFullTableViewData', () => {
let schemaWithoutMetaDataFields;
beforeEach(() => {
schemaWithoutMetaDataFields = _.without(schema, '_attachments');
});
it('returns json object with attributes necessary when selectedFieldsTableView is not set', () => {
const max = 5;
const selectedFieldsTableView = getPrioritizedFields(docs, max);
const notSelectedFieldsTableView = getNotSelectedFields(selectedFieldsTableView, schemaWithoutMetaDataFields);
const options = {
selectedFieldsTableView: [],
showAllFieldsTableView: false
};
expect(getFullTableViewData(docs, options)).toEqual({
schema,
normalizedDocs: docs,
selectedFieldsTableView,
notSelectedFieldsTableView
});
});
it('returns json object with attributes necessary when selectedFieldsTableView is set', () => {
const selectedFieldsTableView = ['_id', 'class', 'diet', 'latin_name', 'max_length'];
const notSelectedFieldsTableView = getNotSelectedFields(selectedFieldsTableView, schemaWithoutMetaDataFields);
const options = {
selectedFieldsTableView,
showAllFieldsTableView: false
};
expect(getFullTableViewData(docs, options)).toEqual({
schema,
normalizedDocs: docs,
selectedFieldsTableView,
notSelectedFieldsTableView
});
});
it('returns json object with attributes necessary when showAllFieldsTableView is set', () => {
const selectedFieldsTableView = ['_id', 'class', 'diet', 'latin_name', 'max_length'];
const options = {
selectedFieldsTableView,
showAllFieldsTableView: true
};
expect(getFullTableViewData(docs, options)).toEqual({
schema,
normalizedDocs: docs,
selectedFieldsTableView: schemaWithoutMetaDataFields,
notSelectedFieldsTableView: null
});
});
});
describe('getMetaDataTableView', () => {
it('returns json object with attributes necessary to build metadata table', () => {
expect(getMetaDataTableView(docs)).toEqual({
schema: schema,
normalizedDocs: docs,
selectedFieldsTableView: schema,
notSelectedFieldsTableView: null
});
});
});
});