tests: add check of JSON schema (#29862)
This commit is contained in:
parent
fb8ede1a88
commit
9a31c770d5
|
@ -0,0 +1,369 @@
|
|||
{
|
||||
"cubes" : [
|
||||
{
|
||||
"dimensions" : [
|
||||
{
|
||||
"join" : [
|
||||
"receipt_time"
|
||||
],
|
||||
"label" : "date de la demande",
|
||||
"name" : "receipt_time",
|
||||
"type" : "date",
|
||||
"value" : "receipt_time.date"
|
||||
},
|
||||
{
|
||||
"join" : [
|
||||
"channel"
|
||||
],
|
||||
"label" : "canal",
|
||||
"name" : "channel",
|
||||
"type" : "integer",
|
||||
"value" : "channel.id",
|
||||
"value_label" : "channel.label"
|
||||
},
|
||||
{
|
||||
"join" : [
|
||||
"formdef",
|
||||
"category"
|
||||
],
|
||||
"label" : "catégorie",
|
||||
"name" : "category",
|
||||
"order_by" : "category.label",
|
||||
"type" : "integer",
|
||||
"value" : "category.id",
|
||||
"value_label" : "category.label"
|
||||
},
|
||||
{
|
||||
"join" : [
|
||||
"formdef"
|
||||
],
|
||||
"label" : "formulaire",
|
||||
"name" : "formdef",
|
||||
"order_by" : "formdef.label",
|
||||
"type" : "integer",
|
||||
"value" : "formdef.id",
|
||||
"value_label" : "formdef.label"
|
||||
},
|
||||
{
|
||||
"join" : [
|
||||
"generic_status"
|
||||
],
|
||||
"label" : "statut simplifié",
|
||||
"name" : "generic_status",
|
||||
"type" : "integer",
|
||||
"value" : "generic_status.id",
|
||||
"value_label" : "generic_status.label"
|
||||
},
|
||||
{
|
||||
"filter" : false,
|
||||
"join" : [
|
||||
"hour"
|
||||
],
|
||||
"label" : "heure",
|
||||
"name" : "hour",
|
||||
"type" : "integer",
|
||||
"value" : "hour.id"
|
||||
},
|
||||
{
|
||||
"join" : [
|
||||
"agent"
|
||||
],
|
||||
"label" : "premier agent traitant",
|
||||
"name" : "agent",
|
||||
"order_by" : "agent.label",
|
||||
"type" : "integer",
|
||||
"value" : "agent.id",
|
||||
"value_label" : "agent.label"
|
||||
}
|
||||
],
|
||||
"fact_table" : "formdata",
|
||||
"joins" : [
|
||||
{
|
||||
"detail" : "date",
|
||||
"master" : "receipt_time",
|
||||
"name" : "receipt_time",
|
||||
"table" : "dates"
|
||||
},
|
||||
{
|
||||
"detail" : "id",
|
||||
"master" : "channel_id",
|
||||
"name" : "channel",
|
||||
"table" : "channel"
|
||||
},
|
||||
{
|
||||
"detail" : "id",
|
||||
"master" : "formdef_id",
|
||||
"name" : "formdef",
|
||||
"table" : "formdef"
|
||||
},
|
||||
{
|
||||
"detail" : "id",
|
||||
"kind" : "left",
|
||||
"master" : "formdef.category_id",
|
||||
"name" : "category",
|
||||
"table" : "category"
|
||||
},
|
||||
{
|
||||
"detail" : "id",
|
||||
"master" : "hour_id",
|
||||
"name" : "hour",
|
||||
"table" : "hour"
|
||||
},
|
||||
{
|
||||
"detail" : "id",
|
||||
"master" : "generic_status_id",
|
||||
"name" : "generic_status",
|
||||
"table" : "status"
|
||||
},
|
||||
{
|
||||
"detail" : "id",
|
||||
"kind" : "inner",
|
||||
"master" : "first_agent_id",
|
||||
"name" : "agent",
|
||||
"table" : "agent"
|
||||
}
|
||||
],
|
||||
"json_field" : "json_data",
|
||||
"key" : "id",
|
||||
"label" : "Tous les formulaires",
|
||||
"measures" : [
|
||||
{
|
||||
"expression" : "count({fact_table}.id)",
|
||||
"label" : "nombre de demandes",
|
||||
"name" : "count",
|
||||
"type" : "integer"
|
||||
},
|
||||
{
|
||||
"expression" : "avg(endpoint_delay)",
|
||||
"label" : "délai de traitement moyen",
|
||||
"name" : "avg_endpoint_delay",
|
||||
"type" : "duration"
|
||||
},
|
||||
{
|
||||
"expression" : "max(endpoint_delay)",
|
||||
"label" : "délai de traitement maximum",
|
||||
"name" : "max_endpoint_delay",
|
||||
"type" : "duration"
|
||||
},
|
||||
{
|
||||
"expression" : "min(endpoint_delay)",
|
||||
"label" : "délai de traitement minimum",
|
||||
"name" : "min_endpoint_delay",
|
||||
"type" : "duration"
|
||||
},
|
||||
{
|
||||
"expression" : "case (select count({fact_table}.id) from {table_expression} where {where_conditions}) when 0 then null else count({fact_table}.id) * 100. / (select count({fact_table}.id) from {table_expression} where {where_conditions}) end",
|
||||
"label" : "pourcentage des demandes",
|
||||
"name" : "percent",
|
||||
"type" : "percent"
|
||||
},
|
||||
{
|
||||
"expression" : "array_agg(\"{fact_table}\".geolocation_base) FILTER (WHERE \"{fact_table}\".geolocation_base IS NOT NULL)",
|
||||
"label" : "localisation géographique",
|
||||
"name" : "geolocation",
|
||||
"type" : "point"
|
||||
}
|
||||
],
|
||||
"name" : "all_formdata"
|
||||
},
|
||||
{
|
||||
"dimensions" : [
|
||||
{
|
||||
"join" : [
|
||||
"receipt_time"
|
||||
],
|
||||
"label" : "date de la demande",
|
||||
"name" : "receipt_time",
|
||||
"type" : "date",
|
||||
"value" : "receipt_time.date"
|
||||
},
|
||||
{
|
||||
"join" : [
|
||||
"channel"
|
||||
],
|
||||
"label" : "canal",
|
||||
"name" : "channel",
|
||||
"type" : "integer",
|
||||
"value" : "channel.id",
|
||||
"value_label" : "channel.label"
|
||||
},
|
||||
{
|
||||
"join" : [
|
||||
"generic_status"
|
||||
],
|
||||
"label" : "statut simplifié",
|
||||
"name" : "generic_status",
|
||||
"type" : "integer",
|
||||
"value" : "generic_status.id",
|
||||
"value_label" : "generic_status.label"
|
||||
},
|
||||
{
|
||||
"filter" : false,
|
||||
"join" : [
|
||||
"hour"
|
||||
],
|
||||
"label" : "heure",
|
||||
"name" : "hour",
|
||||
"type" : "integer",
|
||||
"value" : "hour.id"
|
||||
},
|
||||
{
|
||||
"join" : [
|
||||
"agent"
|
||||
],
|
||||
"label" : "premier agent traitant",
|
||||
"name" : "agent",
|
||||
"order_by" : "agent.label",
|
||||
"type" : "integer",
|
||||
"value" : "agent.id",
|
||||
"value_label" : "agent.label"
|
||||
},
|
||||
{
|
||||
"join" : [
|
||||
"status"
|
||||
],
|
||||
"label" : "statut",
|
||||
"name" : "status",
|
||||
"type" : "integer",
|
||||
"value" : "status.id",
|
||||
"value_label" : "status.label"
|
||||
},
|
||||
{
|
||||
"filter" : false,
|
||||
"join" : [
|
||||
"function__receiver"
|
||||
],
|
||||
"label" : "fonction recipient",
|
||||
"name" : "function__receiver",
|
||||
"type" : "integer",
|
||||
"value" : "\"function__receiver\".id",
|
||||
"value_label" : "\"function__receiver\".label"
|
||||
},
|
||||
{
|
||||
"filter" : true,
|
||||
"join" : [
|
||||
"field_item"
|
||||
],
|
||||
"label" : "2nd field",
|
||||
"name" : "field_item",
|
||||
"type" : "integer",
|
||||
"value" : "\"field_item\".id",
|
||||
"value_label" : "\"field_item\".label"
|
||||
}
|
||||
],
|
||||
"fact_table" : "formdata_demande",
|
||||
"joins" : [
|
||||
{
|
||||
"detail" : "date",
|
||||
"master" : "receipt_time",
|
||||
"name" : "receipt_time",
|
||||
"table" : "dates"
|
||||
},
|
||||
{
|
||||
"detail" : "id",
|
||||
"master" : "channel_id",
|
||||
"name" : "channel",
|
||||
"table" : "channel"
|
||||
},
|
||||
{
|
||||
"detail" : "id",
|
||||
"master" : "formdef_id",
|
||||
"name" : "formdef",
|
||||
"table" : "formdef"
|
||||
},
|
||||
{
|
||||
"detail" : "id",
|
||||
"kind" : "left",
|
||||
"master" : "formdef.category_id",
|
||||
"name" : "category",
|
||||
"table" : "category"
|
||||
},
|
||||
{
|
||||
"detail" : "id",
|
||||
"master" : "hour_id",
|
||||
"name" : "hour",
|
||||
"table" : "hour"
|
||||
},
|
||||
{
|
||||
"detail" : "id",
|
||||
"master" : "generic_status_id",
|
||||
"name" : "generic_status",
|
||||
"table" : "status"
|
||||
},
|
||||
{
|
||||
"detail" : "id",
|
||||
"kind" : "inner",
|
||||
"master" : "first_agent_id",
|
||||
"name" : "agent",
|
||||
"table" : "agent"
|
||||
},
|
||||
{
|
||||
"detail" : "id",
|
||||
"master" : "status_id",
|
||||
"name" : "status",
|
||||
"table" : "status_demande"
|
||||
},
|
||||
{
|
||||
"detail" : "id",
|
||||
"master" : "function__receiver",
|
||||
"name" : "function__receiver",
|
||||
"table" : "role"
|
||||
},
|
||||
{
|
||||
"detail" : "id",
|
||||
"master" : "field_field_item",
|
||||
"name" : "field_item",
|
||||
"table" : "formdata_demande_field_field_item"
|
||||
}
|
||||
],
|
||||
"key" : "id",
|
||||
"label" : "Demande",
|
||||
"measures" : [
|
||||
{
|
||||
"expression" : "count({fact_table}.id)",
|
||||
"label" : "nombre de demandes",
|
||||
"name" : "count",
|
||||
"type" : "integer"
|
||||
},
|
||||
{
|
||||
"expression" : "avg(endpoint_delay)",
|
||||
"label" : "délai de traitement moyen",
|
||||
"name" : "avg_endpoint_delay",
|
||||
"type" : "duration"
|
||||
},
|
||||
{
|
||||
"expression" : "max(endpoint_delay)",
|
||||
"label" : "délai de traitement maximum",
|
||||
"name" : "max_endpoint_delay",
|
||||
"type" : "duration"
|
||||
},
|
||||
{
|
||||
"expression" : "min(endpoint_delay)",
|
||||
"label" : "délai de traitement minimum",
|
||||
"name" : "min_endpoint_delay",
|
||||
"type" : "duration"
|
||||
},
|
||||
{
|
||||
"expression" : "case (select count({fact_table}.id) from {table_expression} where {where_conditions}) when 0 then null else count({fact_table}.id) * 100. / (select count({fact_table}.id) from {table_expression} where {where_conditions}) end",
|
||||
"label" : "pourcentage des demandes",
|
||||
"name" : "percent",
|
||||
"type" : "percent"
|
||||
},
|
||||
{
|
||||
"expression" : "array_agg(\"{fact_table}\".geolocation_base) FILTER (WHERE \"{fact_table}\".geolocation_base IS NOT NULL)",
|
||||
"label" : "localisation géographique",
|
||||
"name" : "geolocation",
|
||||
"type" : "point"
|
||||
}
|
||||
],
|
||||
"name" : "formdata_demande"
|
||||
}
|
||||
],
|
||||
"label" : "olap",
|
||||
"name" : "olap",
|
||||
"pg_dsn" : "dbname=db660834",
|
||||
"search_path" : [
|
||||
"olap",
|
||||
"public"
|
||||
]
|
||||
}
|
|
@ -1,4 +1,5 @@
|
|||
import subprocess
|
||||
import json
|
||||
import pathlib2
|
||||
|
||||
|
||||
def test_wcs_fixture(wcs, postgres_db, tmpdir, caplog):
|
||||
|
@ -82,6 +83,7 @@ schema = olap
|
|||
('status_demande', 'label')
|
||||
]
|
||||
|
||||
# verify SQL schema
|
||||
with postgres_db.conn() as conn:
|
||||
with conn.cursor() as c:
|
||||
c.execute('SELECT table_name, column_name '
|
||||
|
@ -89,3 +91,10 @@ schema = olap
|
|||
'WHERE table_schema = \'olap\' ORDER BY table_name, ordinal_position')
|
||||
|
||||
assert list(c.fetchall()) == expected_schema
|
||||
|
||||
# verify JSON schema
|
||||
with (model_dir / 'olap.model').open() as fd, (pathlib2.Path(__file__).parent / 'olap.model').open() as fd2:
|
||||
json_schema = json.load(fd)
|
||||
expected_json_schema = json.load(fd2)
|
||||
expected_json_schema['pg_dsn'] = postgres_db.dsn
|
||||
assert json_schema == expected_json_schema
|
||||
|
|
Loading…
Reference in New Issue