UNPKG

virool-pivot

Version:

A web-based exploratory visualization UI for Druid.io

243 lines (231 loc) 6.07 kB
import { expect } from 'chai'; import { testImmutableClass } from 'immutable-class/build/tester'; import { $, AttributeInfo } from 'plywood'; import { Measure, MeasureJS } from './measure'; describe('Measure', () => { it('is an immutable class', () => { testImmutableClass<MeasureJS>(Measure, [ { name: 'price', title: 'Price', expression: $('main').sum('$price').toJS() }, { name: 'avg_price', title: 'Average Price', expression: $('main').average('$price').toJS() } ]); }); describe('.measuresFromAttributeInfo', () => { it('works with sum', () => { var attribute = AttributeInfo.fromJS({ "name": "price", "type": "NUMBER", "unsplitable": true, "makerAction": { "action": "sum", "expression": { "name": "price", "op": "ref" } } }); var measures = Measure.measuresFromAttributeInfo(attribute).map((m => m.toJS())); expect(measures).to.deep.equal([ { "expression": { "action": { "action": "sum", "expression": { "name": "price", "op": "ref" } }, "expression": { "name": "main", "op": "ref" }, "op": "chain" }, "name": "price", "title": "Price" } ]); }); it('works with min', () => { var attribute = AttributeInfo.fromJS({ "name": "price", "type": "NUMBER", "unsplitable": true, "makerAction": { "action": "min", "expression": { "name": "price", "op": "ref" } } }); var measures = Measure.measuresFromAttributeInfo(attribute).map((m => m.toJS())); expect(measures).to.deep.equal([ { "expression": { "action": { "action": "min", "expression": { "name": "price", "op": "ref" } }, "expression": { "name": "main", "op": "ref" }, "op": "chain" }, "name": "price", "title": "Price" } ]); }); it('works with max', () => { var attribute = AttributeInfo.fromJS({ "name": "price", "type": "NUMBER", "unsplitable": true, "makerAction": { "action": "max", "expression": { "name": "price", "op": "ref" } } }); var measures = Measure.measuresFromAttributeInfo(attribute).map((m => m.toJS())); expect(measures).to.deep.equal([ { "expression": { "action": { "action": "max", "expression": { "name": "price", "op": "ref" } }, "expression": { "name": "main", "op": "ref" }, "op": "chain" }, "name": "price", "title": "Price" } ]); }); it('works with histogram', () => { var attribute = AttributeInfo.fromJS({ "name": "delta_hist", "special": "histogram", "type": "NUMBER" }); var measures = Measure.measuresFromAttributeInfo(attribute).map((m => m.toJS())); expect(measures).to.deep.equal([ { "expression": { "action": { "action": "quantile", "expression": { "name": "delta_hist", "op": "ref" }, "quantile": 0.95 }, "expression": { "name": "main", "op": "ref" }, "op": "chain" }, "name": "delta_hist_p95", "title": "Delta Hist P95" }, { "expression": { "action": { "action": "quantile", "expression": { "name": "delta_hist", "op": "ref" }, "quantile": 0.99 }, "expression": { "name": "main", "op": "ref" }, "op": "chain" }, "name": "delta_hist_p99", "title": "Delta Hist P99" } ]); }); it('works with unique', () => { var attribute = AttributeInfo.fromJS({ "name": "unique_page", "special": "unique", "type": "STRING" }); var measures = Measure.measuresFromAttributeInfo(attribute).map((m => m.toJS())); expect(measures).to.deep.equal([ { "expression": { "action": { "action": "countDistinct", "expression": { "name": "unique_page", "op": "ref" } }, "expression": { "name": "main", "op": "ref" }, "op": "chain" }, "name": "unique_page", "title": "Unique Page" } ]); }); it('works with theta', () => { var attribute = AttributeInfo.fromJS({ "name": "page_theta", "special": "theta", "type": "STRING" }); var measures = Measure.measuresFromAttributeInfo(attribute).map((m => m.toJS())); expect(measures).to.deep.equal([ { "expression": { "action": { "action": "countDistinct", "expression": { "name": "page_theta", "op": "ref" } }, "expression": { "name": "main", "op": "ref" }, "op": "chain" }, "name": "page_theta", "title": "Page Theta" } ]); }); }); });