From 532654eea8921fdb30b4be5250512450b45399f8 Mon Sep 17 00:00:00 2001 From: Javier Goizueta Date: Thu, 21 Jan 2016 13:33:45 +0100 Subject: [PATCH] Add tests for the OverviewsApi --- test/integration/overviews-api.js | 54 +++++++++++++++++++ test/support/sql/CDB_Overviews.sql | 2 +- test/support/sql/windshaft.test.sql | 80 ++++++++++++++++++++++++++++- 3 files changed, 134 insertions(+), 2 deletions(-) create mode 100644 test/integration/overviews-api.js diff --git a/test/integration/overviews-api.js b/test/integration/overviews-api.js new file mode 100644 index 00000000..4940955f --- /dev/null +++ b/test/integration/overviews-api.js @@ -0,0 +1,54 @@ +require('../support/test_helper'); + +var assert = require('assert'); + +var RedisPool = require('redis-mpool'); +var cartodbRedis = require('cartodb-redis'); + +var PgConnection = require('../../lib/cartodb/backends/pg_connection'); +var PgQueryRunner = require('../../lib/cartodb/backends/pg_query_runner'); +var QueryTablesApi = require('../../lib/cartodb/api/query_tables_api'); +var OverviewsApi = require('../../lib/cartodb/api/overviews_api'); + + +describe('OverviewsApi', function() { + + var queryTablesApi, overviewsApi; + + before(function() { + var redisPool = new RedisPool(global.environment.redis); + var metadataBackend = cartodbRedis({pool: redisPool}); + var pgConnection = new PgConnection(metadataBackend); + var pgQueryRunner = new PgQueryRunner(pgConnection); + queryTablesApi = new QueryTablesApi(pgQueryRunner); + overviewsApi = new OverviewsApi(queryTablesApi); + }); + + it('should return an empty relation for tables that have no overviews', function(done) { + var query = 'select * from test_table'; + overviewsApi.getOverviewsMetadata('localhost', query, function(err, result) { + assert.ok(!err, err); + + assert.deepEqual(result, {}); + + done(); + }); + }); + + it('should return overviews metadata', function(done) { + var query = 'select * from test_table_overviews'; + overviewsApi.getOverviewsMetadata('localhost', query, function(err, result) { + assert.ok(!err, err); + + assert.deepEqual(result, { + 'public.test_table_overviews': { + 1: { table: 'test_table_overviews_ov1' }, + 2: { table: 'test_table_overviews_ov2' } + } + }); + + done(); + }); + }); + +}); diff --git a/test/support/sql/CDB_Overviews.sql b/test/support/sql/CDB_Overviews.sql index c093dfa9..9e04f611 100644 --- a/test/support/sql/CDB_Overviews.sql +++ b/test/support/sql/CDB_Overviews.sql @@ -3,7 +3,7 @@ CREATE OR REPLACE FUNCTION CDB_Overviews(table_name text) RETURNS TABLE(z integer, overview_table text) AS $$ BEGIN - IF table_name = 'test_table_overviews' THEN + IF table_name = 'public.test_table_overviews' THEN RETURN QUERY SELECT 1 AS z, 'test_table_overviews_ov1'::text AS overviw_table UNION ALL diff --git a/test/support/sql/windshaft.test.sql b/test/support/sql/windshaft.test.sql index 4febe94c..3b795c01 100644 --- a/test/support/sql/windshaft.test.sql +++ b/test/support/sql/windshaft.test.sql @@ -1,6 +1,6 @@ -- -- Windshaft test database --- +-- -- To use run ../prepare_db.sh -- NOTE: requires a postgis template called template_postgis -- @@ -238,3 +238,81 @@ CREATE INDEX test_big_poly_the_geom_webmercator_idx ON test_big_poly USING gist GRANT ALL ON TABLE test_big_poly TO :TESTUSER; GRANT SELECT ON TABLE test_big_poly TO :PUBLICUSER; + +-- table with overviews + +CREATE TABLE test_table_overviews ( + updated_at timestamp without time zone DEFAULT now(), + created_at timestamp without time zone DEFAULT now(), + cartodb_id integer NOT NULL, + name character varying, + address character varying, + the_geom geometry, + the_geom_webmercator geometry, + CONSTRAINT enforce_dims_the_geom CHECK ((st_ndims(the_geom) = 2)), + CONSTRAINT enforce_dims_the_geom_webmercator CHECK ((st_ndims(the_geom_webmercator) = 2)), + CONSTRAINT enforce_geotype_the_geom CHECK (((geometrytype(the_geom) = 'POINT'::text) OR (the_geom IS NULL))), + CONSTRAINT enforce_geotype_the_geom_webmercator CHECK (((geometrytype(the_geom_webmercator) = 'POINT'::text) OR (the_geom_webmercator IS NULL))), + CONSTRAINT enforce_srid_the_geom CHECK ((st_srid(the_geom) = 4326)), + CONSTRAINT enforce_srid_the_geom_webmercator CHECK ((st_srid(the_geom_webmercator) = 3857)) +); + +CREATE SEQUENCE test_table_overviews_cartodb_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + +ALTER SEQUENCE test_table_overviews_cartodb_id_seq OWNED BY test_table_overviews.cartodb_id; + +SELECT pg_catalog.setval('test_table_overviews_cartodb_id_seq', 60, true); + +ALTER TABLE test_table_overviews ALTER COLUMN cartodb_id SET DEFAULT nextval('test_table_overviews_cartodb_id_seq'::regclass); + +INSERT INTO test_table_overviews VALUES +('2011-09-21 14:02:21.358706', '2011-09-21 14:02:21.314252', 1, 'Hawai', 'Calle de Pérez Galdós 9, Madrid, Spain', '0101000020E6100000A6B73F170D990DC064E8D84125364440', '0101000020110F000076491621312319C122D4663F1DCC5241'), +('2011-09-21 14:02:21.358706', '2011-09-21 14:02:21.319101', 2, 'El Estocolmo', 'Calle de la Palma 72, Madrid, Spain', '0101000020E6100000C90567F0F7AB0DC0AB07CC43A6364440', '0101000020110F0000C4356B29423319C15DD1092DADCC5241'), +('2011-09-21 14:02:21.358706', '2011-09-21 14:02:21.324', 3, 'El Rey del Tallarín', 'Plaza Conde de Toreno 2, Madrid, Spain', '0101000020E610000021C8410933AD0DC0CB0EF10F5B364440', '0101000020110F000053E71AC64D3419C10F664E4659CC5241'), +('2011-09-21 14:02:21.358706', '2011-09-21 14:02:21.329509', 4, 'El Lacón', 'Manuel Fernández y González 8, Madrid, Spain', '0101000020E6100000BC5983F755990DC07D923B6C22354440', '0101000020110F00005DACDB056F2319C1EC41A980FCCA5241'), +('2011-09-21 14:02:21.358706', '2011-09-21 14:02:21.334931', 5, 'El Pico', 'Calle Divino Pastor 12, Madrid, Spain', '0101000020E61000003B6D8D08C6A10DC0371B2B31CF364440', '0101000020110F00005F716E91992A19C17DAAA4D6DACC5241'); + +ALTER TABLE ONLY test_table_overviews ADD CONSTRAINT test_table_overviews_pkey PRIMARY KEY (cartodb_id); + +CREATE INDEX test_table_overviews_the_geom_idx ON test_table_overviews USING gist (the_geom); +CREATE INDEX test_table_overviews_the_geom_webmercator_idx ON test_table_overviews USING gist (the_geom_webmercator); + +GRANT ALL ON TABLE test_table_overviews TO :TESTUSER; +GRANT SELECT ON TABLE test_table_overviews TO :PUBLICUSER; + +CREATE TABLE test_table_overviews_ov1 ( + updated_at timestamp without time zone DEFAULT now(), + created_at timestamp without time zone DEFAULT now(), + cartodb_id integer NOT NULL, + name character varying, + address character varying, + the_geom geometry, + the_geom_webmercator geometry, + CONSTRAINT enforce_dims_the_geom CHECK ((st_ndims(the_geom) = 2)), + CONSTRAINT enforce_dims_the_geom_webmercator CHECK ((st_ndims(the_geom_webmercator) = 2)), + CONSTRAINT enforce_geotype_the_geom CHECK (((geometrytype(the_geom) = 'POINT'::text) OR (the_geom IS NULL))), + CONSTRAINT enforce_geotype_the_geom_webmercator CHECK (((geometrytype(the_geom_webmercator) = 'POINT'::text) OR (the_geom_webmercator IS NULL))), + CONSTRAINT enforce_srid_the_geom CHECK ((st_srid(the_geom) = 4326)), + CONSTRAINT enforce_srid_the_geom_webmercator CHECK ((st_srid(the_geom_webmercator) = 3857)) +); + +CREATE TABLE test_table_overviews_ov2 ( + updated_at timestamp without time zone DEFAULT now(), + created_at timestamp without time zone DEFAULT now(), + cartodb_id integer NOT NULL, + name character varying, + address character varying, + the_geom geometry, + the_geom_webmercator geometry, + CONSTRAINT enforce_dims_the_geom CHECK ((st_ndims(the_geom) = 2)), + CONSTRAINT enforce_dims_the_geom_webmercator CHECK ((st_ndims(the_geom_webmercator) = 2)), + CONSTRAINT enforce_geotype_the_geom CHECK (((geometrytype(the_geom) = 'POINT'::text) OR (the_geom IS NULL))), + CONSTRAINT enforce_geotype_the_geom_webmercator CHECK (((geometrytype(the_geom_webmercator) = 'POINT'::text) OR (the_geom_webmercator IS NULL))), + CONSTRAINT enforce_srid_the_geom CHECK ((st_srid(the_geom) = 4326)), + CONSTRAINT enforce_srid_the_geom_webmercator CHECK ((st_srid(the_geom_webmercator) = 3857)) +);