@opengis/gis 0.2.176 → 0.2.177
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +181 -181
- package/dist/{CardIcon-c1Q2M3wQ.js → CardIcon-CMRD1LLh.js} +1 -1
- package/dist/{EntityTablePage-B5gpkH4S.js → EntityTablePage-XNNCltAN.js} +2 -2
- package/dist/{ExtentOutlineLayer.vue_vue_type_script_setup_true_lang-DnGSvmMU.js → ExtentOutlineLayer.vue_vue_type_script_setup_true_lang-BqUjKTDY.js} +1 -1
- package/dist/{HeaderActions.vue_vue_type_script_setup_true_lang-C2B61JP6.js → HeaderActions.vue_vue_type_script_setup_true_lang-BXQ3hKwa.js} +1 -1
- package/dist/{MapSettings-6-Xru5Q8.js → MapSettings-P3h-vHn3.js} +2 -2
- package/dist/{RastersTablePage-CXNOcTy-.js → RastersTablePage-DnhGZLiH.js} +2 -2
- package/dist/{cartocss-BFVqWvfP.js → cartocss-BkrOeQg4.js} +6 -6
- package/dist/{import-utils-uxk4LdUJ.js → import-utils-BCATsbB5.js} +1 -1
- package/dist/{index-CahlV-Xs.js → index-cUagVqgA.js} +39 -39
- package/dist/index.css +1 -1
- package/dist/index.js +1 -1
- package/dist/index.umd.cjs +5 -5
- package/dist/{raster-CEi56f0P.js → raster-CP0tUp3j.js} +3 -3
- package/dist/{register-NFAGBNa3.js → register-Cr-uQcby.js} +3 -3
- package/dist/{service-BYspag8U.js → service-DwJaKrOd.js} +6 -6
- package/dist/{vs-datatable-CHcBr6zy.js → vs-datatable-B9WoVk-b.js} +2 -2
- package/module/gis/cls/service_type.json +42 -42
- package/module/gis/form/gis.registers.form.json +127 -127
- package/module/test/map/addr.json +302 -302
- package/module/test/map/addr1.yml +23 -23
- package/module/test/select/address.str_id.sql +3 -3
- package/package.json +77 -77
- package/plugin.js +64 -64
- package/server/migrations/array_intersect.sql +13 -13
- package/server/migrations/cartocss.sql +27 -27
- package/server/migrations/group_list.sql +74 -74
- package/server/migrations/maps.sql +30 -30
- package/server/migrations/metadata.sql +415 -415
- package/server/migrations/ogc.sql +106 -106
- package/server/migrations/rasters.sql +265 -265
- package/server/migrations/services.sql +247 -247
- package/server/migrations/services_users_rel.sql +22 -22
- package/server/migrations/widgets.sql +20 -20
- package/server/plugins/crons.js +21 -21
- package/server/plugins/mapnik/funcs/checkRasterFile.js +107 -107
- package/server/plugins/mapnik/funcs/mapnik.js +151 -151
- package/server/plugins/mapnik/funcs/rootFolder.mjs +8 -8
- package/server/plugins/mapnik/map.proto +437 -437
- package/server/plugins/vite.js +74 -74
- package/server/routes/cartocss/cartocss.route.js +31 -31
- package/server/routes/cartocss/cartocss.route.test.js +78 -78
- package/server/routes/cartocss/cartocss.schema.js +73 -73
- package/server/routes/cartocss/functions/add.cartocss.js +39 -39
- package/server/routes/cartocss/functions/get.cartocss.js +57 -57
- package/server/routes/gis/functions/checkXML.js +107 -107
- package/server/routes/gis/functions/dashboard.js +24 -24
- package/server/routes/gis/gis.route.js +26 -26
- package/server/routes/gis/gis.route.test.js +33 -33
- package/server/routes/map/functions/clearTiles.js +35 -35
- package/server/routes/map/functions/geojson.js +187 -187
- package/server/routes/map/functions/gis.convert.js +65 -65
- package/server/routes/map/functions/gis.icon.js +220 -220
- package/server/routes/map/functions/jsonData.js +206 -206
- package/server/routes/map/functions/layerList.js +102 -102
- package/server/routes/map/functions/map.js +122 -122
- package/server/routes/map/functions/mapCatalog.js +72 -72
- package/server/routes/map/functions/mapCatalogAttribute.js +53 -53
- package/server/routes/map/functions/mapFeatures.js +133 -133
- package/server/routes/map/functions/mapFormat.js +232 -232
- package/server/routes/map/functions/mapTiles.js +162 -162
- package/server/routes/map/functions/maps.js +15 -15
- package/server/routes/map/functions/marker_icon.js +43 -43
- package/server/routes/map/functions/parseGeoFile.js +85 -85
- package/server/routes/map/functions/pointHeight.js +51 -51
- package/server/routes/map/functions/vtile.js +174 -174
- package/server/routes/map/functions/vtile1.js +185 -185
- package/server/routes/map/map.route.js +280 -280
- package/server/routes/map/map.route.test.js +503 -503
- package/server/routes/map/map.schema.js +356 -356
- package/server/routes/map/pin/circle1.svg +76 -76
- package/server/routes/map/pin/circle2.svg +18 -18
- package/server/routes/map/pin/none.svg +12 -12
- package/server/routes/map/pin/pin.svg +14 -14
- package/server/routes/map/pin/pin1.svg +16 -16
- package/server/routes/map/pin/pin2.svg +7 -7
- package/server/routes/map/pin/pin3.svg +34 -34
- package/server/routes/map/pin/pin4.svg +14 -14
- package/server/routes/map/pin/pin5.svg +7 -7
- package/server/routes/map/pin/pin6.svg +12 -12
- package/server/routes/map/pin/pin7.svg +12 -12
- package/server/routes/mapnik/functions/cartoBounds.js +32 -32
- package/server/routes/mapnik/functions/clearTiles.js +103 -103
- package/server/routes/mapnik/functions/convertBoundToTile.js +27 -27
- package/server/routes/mapnik/functions/createXml.js +76 -76
- package/server/routes/mapnik/functions/createXmlMulti.js +72 -72
- package/server/routes/mapnik/functions/fileSearch.js +35 -35
- package/server/routes/mapnik/functions/fileStat.js +28 -28
- package/server/routes/mapnik/functions/pretile.js +138 -138
- package/server/routes/mapnik/functions/rasterInfo.js +66 -66
- package/server/routes/mapnik/functions/readDir.js +22 -22
- package/server/routes/mapnik/functions/rtile.js +164 -164
- package/server/routes/mapnik/functions/uploadRaster.js +152 -152
- package/server/routes/mapnik/functions/uploadXML.js +140 -140
- package/server/routes/mapnik/mapnik.route.js +102 -102
- package/server/routes/mapnik/mapnik.route.test.js +370 -370
- package/server/routes/mapnik/mapnik.schema.mjs +195 -195
- package/server/routes/mapnik.prefixless/functions/mapnikLogger.js +31 -31
- package/server/routes/mapnik.prefixless/functions/mapnikStat.js +21 -21
- package/server/routes/mapnik.prefixless/mapnik.prefixless.route.js +20 -20
- package/server/routes/mapnik.prefixless/mapnik.prefixless.route.test.js +91 -91
- package/server/routes/mapnik.prefixless/mapnik.prefixless.schema.mjs +27 -27
- package/server/routes/maps/functions/add.map.js +42 -42
- package/server/routes/maps/functions/del.map.js +17 -17
- package/server/routes/maps/functions/get.map.js +119 -119
- package/server/routes/maps/maps.route.js +58 -58
- package/server/routes/maps/maps.route.test.js +231 -231
- package/server/routes/maps/maps.schema.js +9 -9
- package/server/routes/metadata/functions/editMetadata.js +35 -35
- package/server/routes/metadata/functions/metadataXML.js +19 -19
- package/server/routes/metadata/metadata.route.js +26 -26
- package/server/routes/metadata/metadata.route.test.js +46 -46
- package/server/routes/metadata/metadata.schema.js +53 -53
- package/server/routes/ogc/functions/map.info.point.js +117 -117
- package/server/routes/ogc/ogc.route.js +21 -21
- package/server/routes/ogc/ogc.route.test.js +53 -53
- package/server/routes/ogc/ogc.schema.js +16 -16
- package/server/routes/permissions/functions/catalog.permissions.edit.js +20 -20
- package/server/routes/permissions/functions/catalog.permissions.js +12 -12
- package/server/routes/permissions/functions/get.permissions.js +59 -59
- package/server/routes/permissions/functions/gis.catalog.js +80 -80
- package/server/routes/permissions/permissions.route.js +35 -35
- package/server/routes/permissions/permissions.route.test.js +35 -35
- package/server/routes/permissions/permissions.schema.js +43 -43
- package/server/routes/registers/functions/add.registry.js +37 -37
- package/server/routes/registers/functions/classifiers.js +100 -100
- package/server/routes/registers/functions/columns.js +3 -3
- package/server/routes/registers/functions/content.type.js +9 -9
- package/server/routes/registers/functions/del.registry.js +14 -14
- package/server/routes/registers/functions/get.info.js +93 -93
- package/server/routes/registers/functions/getTableColumnMeta.js +131 -0
- package/server/routes/registers/functions/gis.export.js +159 -159
- package/server/routes/registers/functions/gis.registry.js +71 -71
- package/server/routes/registers/functions/gis.registry.list.js +61 -61
- package/server/routes/registers/functions/gis.suggest.js +284 -0
- package/server/routes/registers/functions/handleRegistryRequest.js +167 -147
- package/server/routes/registers/functions/map.registry.js +87 -87
- package/server/routes/registers/registers.route.js +91 -80
- package/server/routes/registers/registers.route.test.js +144 -144
- package/server/routes/registers/registers.schema.js +270 -246
- package/server/routes/root.mjs +3 -3
- package/server/routes/services/functions/add.service.js +62 -62
- package/server/routes/services/functions/create.route.js +93 -93
- package/server/routes/services/functions/del.service.js +12 -12
- package/server/routes/services/functions/get.layer.geom.js +27 -27
- package/server/routes/services/functions/get.service.users.js +76 -76
- package/server/routes/services/functions/get.services.col.js +34 -34
- package/server/routes/services/functions/get.services.js +89 -89
- package/server/routes/services/functions/legend.auto.js +77 -77
- package/server/routes/services/services.route.js +76 -76
- package/server/routes/services/services.route.test.js +167 -167
- package/server/routes/services/services.schema.js +285 -278
- package/server/routes/widgets/functions/add.widget.js +38 -38
- package/server/routes/widgets/functions/del.widget.js +17 -17
- package/server/routes/widgets/functions/get.widget.js +41 -41
- package/server/routes/widgets/widgets.route.js +61 -61
- package/server/routes/widgets/widgets.route.test.js +144 -144
- package/server/routes/widgets/widgets.schema.js +24 -24
- package/server/shared/listFiles.js +14 -14
- package/utils.js +13 -13
|
@@ -1,80 +1,91 @@
|
|
|
1
|
-
import gisRegistry from './functions/gis.registry.js';
|
|
2
|
-
import gisRegistryList from './functions/gis.registry.list.js';
|
|
3
|
-
// import mapRegistry from './functions/map.registry.js';
|
|
4
|
-
import gisExport from './functions/gis.export.js';
|
|
5
|
-
import addGisRegistry from './functions/add.registry.js';
|
|
6
|
-
import deleteGisRegistry from './functions/del.registry.js';
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
1
|
+
import gisRegistry from './functions/gis.registry.js';
|
|
2
|
+
import gisRegistryList from './functions/gis.registry.list.js';
|
|
3
|
+
// import mapRegistry from './functions/map.registry.js';
|
|
4
|
+
import gisExport from './functions/gis.export.js';
|
|
5
|
+
import addGisRegistry from './functions/add.registry.js';
|
|
6
|
+
import deleteGisRegistry from './functions/del.registry.js';
|
|
7
|
+
import gisSuggest from './functions/gis.suggest.js';
|
|
8
|
+
|
|
9
|
+
import {
|
|
10
|
+
gisRegistrySchema,
|
|
11
|
+
gisRegistryListSchema,
|
|
12
|
+
addGisRegistrySchema,
|
|
13
|
+
editGisRegistrySchema,
|
|
14
|
+
deleteGisRegistrySchema,
|
|
15
|
+
gisExportSchema,
|
|
16
|
+
gisSuggestSchema,
|
|
17
|
+
} from './registers.schema.js';
|
|
18
|
+
|
|
19
|
+
const publicParams = { config: { policy: 'L0', package: 'gis' } };
|
|
20
|
+
|
|
21
|
+
async function route(app) {
|
|
22
|
+
app.get('/gis-registry/:slug', { ...publicParams, schema: gisRegistrySchema }, async ({ params, query, pg }) => {
|
|
23
|
+
const result = await gisRegistry({
|
|
24
|
+
slug: params.slug,
|
|
25
|
+
search: query.search,
|
|
26
|
+
filter: query.filter,
|
|
27
|
+
page: query.page,
|
|
28
|
+
limit: query.limit,
|
|
29
|
+
sql: query.sql,
|
|
30
|
+
}, pg);
|
|
31
|
+
return result;
|
|
32
|
+
});
|
|
33
|
+
app.get('/gis-registry/:slug/:objectId', { ...publicParams, schema: gisRegistrySchema }, async ({ params, query, pg }) => {
|
|
34
|
+
const result = await gisRegistry({
|
|
35
|
+
slug: params.slug,
|
|
36
|
+
objectId: params.objectId,
|
|
37
|
+
search: query.search,
|
|
38
|
+
filter: query.filter,
|
|
39
|
+
page: query.page,
|
|
40
|
+
limit: query.limit,
|
|
41
|
+
sql: query.sql,
|
|
42
|
+
}, pg);
|
|
43
|
+
return result;
|
|
44
|
+
});
|
|
45
|
+
app.get('/gis-registry', { ...publicParams, schema: gisRegistryListSchema }, async ({ query, pg }) => {
|
|
46
|
+
const result = await gisRegistryList({
|
|
47
|
+
page: query.page,
|
|
48
|
+
limit: query.limit,
|
|
49
|
+
search: query.search,
|
|
50
|
+
}, pg);
|
|
51
|
+
return result;
|
|
52
|
+
});
|
|
53
|
+
app.post('/gis-registry/:slug?', { ...publicParams, schema: addGisRegistrySchema }, async ({ method, params, body, user, pg }) => {
|
|
54
|
+
const result = await addGisRegistry({
|
|
55
|
+
method, slug: params.slug, body, uid: user?.uid,
|
|
56
|
+
}, pg);
|
|
57
|
+
return result;
|
|
58
|
+
});
|
|
59
|
+
app.put('/gis-registry/:slug', { ...publicParams, schema: editGisRegistrySchema }, async ({ method, params, body, user, pg }) => {
|
|
60
|
+
const result = await addGisRegistry({
|
|
61
|
+
method, slug: params.slug, body, uid: user?.uid,
|
|
62
|
+
}, pg);
|
|
63
|
+
return result;
|
|
64
|
+
});
|
|
65
|
+
app.delete('/gis-registry/:slug', { ...publicParams, schema: deleteGisRegistrySchema }, async ({ params, user, pg }) => {
|
|
66
|
+
const result = await deleteGisRegistry({
|
|
67
|
+
slug: params.slug,
|
|
68
|
+
uid: user?.uid,
|
|
69
|
+
}, pg);
|
|
70
|
+
return result;
|
|
71
|
+
});
|
|
72
|
+
// app.get('/map-registry/:slug/:id', { ...publicParams, schema: mapRegistrySchema }, mapRegistry);
|
|
73
|
+
app.get('/gis-export/:type/:slug', { ...publicParams, schema: gisExportSchema }, async ({ params, query, pg }, reply) => {
|
|
74
|
+
const result = await gisExport({
|
|
75
|
+
slug: params.slug,
|
|
76
|
+
type: params.type,
|
|
77
|
+
format: query.format,
|
|
78
|
+
}, pg);
|
|
79
|
+
return reply.headers(result.headers).send(result.data);
|
|
80
|
+
});
|
|
81
|
+
app.get('/gis-suggest/:token', { ...publicParams, schema: gisSuggestSchema }, async ({ params, query, pg }) => {
|
|
82
|
+
const result = await gisSuggest({
|
|
83
|
+
token: params.token,
|
|
84
|
+
key: query.key,
|
|
85
|
+
val: query.val,
|
|
86
|
+
limit: query.limit,
|
|
87
|
+
}, pg);
|
|
88
|
+
return result;
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
export default route;
|
|
@@ -1,145 +1,145 @@
|
|
|
1
|
-
import { afterAll, beforeAll, describe, expect, test } from 'vitest';
|
|
2
|
-
|
|
3
|
-
import { getPGAsync } from '@opengis/fastify-table/utils.js';
|
|
4
|
-
|
|
5
|
-
import { build, injectWithHeaders } from '../../../test/helper.js';
|
|
6
|
-
|
|
7
|
-
let pg;
|
|
8
|
-
|
|
9
|
-
beforeAll(async () => {
|
|
10
|
-
await build();
|
|
11
|
-
|
|
12
|
-
pg = await getPGAsync();
|
|
13
|
-
|
|
14
|
-
await cleanUp('before');
|
|
15
|
-
});
|
|
16
|
-
|
|
17
|
-
afterAll(async () => {
|
|
18
|
-
await cleanUp('after');
|
|
19
|
-
});
|
|
20
|
-
|
|
21
|
-
const testId = 'testRegister';
|
|
22
|
-
|
|
23
|
-
const cleanUp = async (when) => {
|
|
24
|
-
if (!pg) return;
|
|
25
|
-
const rowCount2 = await pg.query('delete from gis.registers where register_id=$1', [testId]).then(r => r.rowCount || 0);
|
|
26
|
-
console.log(`clean up finished: ${when}`, rowCount2);
|
|
27
|
-
};
|
|
28
|
-
|
|
29
|
-
describe('GIS routes', () => {
|
|
30
|
-
test('GET /gis-registry/:slug returns 200', async () => {
|
|
31
|
-
const { slug, table } = await pg.query('SELECT register_id as slug, table_name as table FROM gis.registers where table_name is not null limit 1').then(r => r.rows[0]) || {};
|
|
32
|
-
const pkey = pg.pk?.[table];
|
|
33
|
-
expect(pkey).toBeDefined();
|
|
34
|
-
|
|
35
|
-
const res = await injectWithHeaders({
|
|
36
|
-
url: `/api/gis-registry/${slug}`,
|
|
37
|
-
});
|
|
38
|
-
|
|
39
|
-
expect(res.statusCode).toBe(200);
|
|
40
|
-
[
|
|
41
|
-
"total", "limit", "page", "register_id", "name", "card", "table_name", "register_key", "description",
|
|
42
|
-
"rows", "service_id", "columns", "filters", "fields", "view", "is_downloadable", "is_map", "is_register",
|
|
43
|
-
"is_files", "config"
|
|
44
|
-
].forEach(key => expect(res.body).toHaveProperty(key));
|
|
45
|
-
});
|
|
46
|
-
|
|
47
|
-
test('GET /gis-registry/:slug/:objectId returns 200', async () => {
|
|
48
|
-
const { slug, table } = await pg.query('SELECT register_id as slug, table_name as table FROM gis.registers where table_name is not null limit 1').then(r => r.rows[0]) || {};
|
|
49
|
-
const pkey = pg.pk?.[table];
|
|
50
|
-
expect(pkey).toBeDefined();
|
|
51
|
-
|
|
52
|
-
const objectId = await pg.query(`select ${pkey} from ${table} limit 1`).then(r => r.rows?.[0]?.[pkey]);
|
|
53
|
-
expect(objectId).toBeDefined();
|
|
54
|
-
|
|
55
|
-
const url = `/api/gis-registry/${slug}/${objectId}`;
|
|
56
|
-
const res = await injectWithHeaders({
|
|
57
|
-
url,
|
|
58
|
-
});
|
|
59
|
-
|
|
60
|
-
expect(res.statusCode, url).toBe(200);
|
|
61
|
-
[
|
|
62
|
-
"row", "card", "d", "columns", "is_downloadable", "register_key", "register_id", "service_id",
|
|
63
|
-
"name", "is_files", "is_map", "is_register"
|
|
64
|
-
].forEach(key => expect(res.body).toHaveProperty(key));
|
|
65
|
-
});
|
|
66
|
-
|
|
67
|
-
test('GET /gis-registry returns 200', async () => {
|
|
68
|
-
const res = await injectWithHeaders({
|
|
69
|
-
url: '/api/gis-registry',
|
|
70
|
-
});
|
|
71
|
-
|
|
72
|
-
expect(res.statusCode).toBe(200);
|
|
73
|
-
["rows", "total", "page", "limit", "offset"].forEach(key => expect(res.body).toHaveProperty(key));
|
|
74
|
-
});
|
|
75
|
-
|
|
76
|
-
test('POST /gis-registry returns 200', async () => {
|
|
77
|
-
const table = pg.tlist.find(el => el.includes('parcel') || el.includes('address') || el.includes('street')) || pg.tlist[0];
|
|
78
|
-
await pg.query('delete from gis.registers where register_id=$1', [testId]);
|
|
79
|
-
|
|
80
|
-
const payload = {
|
|
81
|
-
register_key: 'unit-test',
|
|
82
|
-
name: 'unit-test',
|
|
83
|
-
table_name: table
|
|
84
|
-
};
|
|
85
|
-
|
|
86
|
-
const res = await injectWithHeaders({
|
|
87
|
-
method: 'POST',
|
|
88
|
-
url: `/api/gis-registry/${testId}`,
|
|
89
|
-
payload
|
|
90
|
-
});
|
|
91
|
-
|
|
92
|
-
expect(res.statusCode).toBe(200);
|
|
93
|
-
expect(res.body).toHaveProperty('register_id');
|
|
94
|
-
expect(res.body).toHaveProperty('register_key');
|
|
95
|
-
expect(res.body).toHaveProperty('name');
|
|
96
|
-
expect(res.body.name).toBe(payload.name);
|
|
97
|
-
expect(res.body).toHaveProperty('table_name');
|
|
98
|
-
});
|
|
99
|
-
|
|
100
|
-
test('PUT /gis-registry/:slug returns 200', async () => {
|
|
101
|
-
const payload = {
|
|
102
|
-
name: 'unit-test edited',
|
|
103
|
-
};
|
|
104
|
-
const res = await injectWithHeaders({
|
|
105
|
-
method: 'PUT',
|
|
106
|
-
url: `/api/gis-registry/${testId}`,
|
|
107
|
-
payload
|
|
108
|
-
});
|
|
109
|
-
|
|
110
|
-
expect(res.statusCode).toBe(200);
|
|
111
|
-
expect(res.body).toHaveProperty('register_id');
|
|
112
|
-
expect(res.body).toHaveProperty('register_key');
|
|
113
|
-
expect(res.body).toHaveProperty('name');
|
|
114
|
-
expect(res.body.name).toBe(payload.name);
|
|
115
|
-
expect(res.body).toHaveProperty('table_name');
|
|
116
|
-
});
|
|
117
|
-
|
|
118
|
-
// ! before delete
|
|
119
|
-
test('GET /gis-export/:type/:slug returns 200', async () => {
|
|
120
|
-
const res = await injectWithHeaders({
|
|
121
|
-
url: `/api/gis-export/register/${testId}`,
|
|
122
|
-
format: 'csv'
|
|
123
|
-
});
|
|
124
|
-
|
|
125
|
-
expect(res.statusCode).toBe(200);
|
|
126
|
-
expect(res.headers).toHaveProperty('content-type');
|
|
127
|
-
expect(res.headers['content-type']).toBe('text/csv');
|
|
128
|
-
expect(res.headers).toHaveProperty('content-disposition');
|
|
129
|
-
expect(res.headers['content-disposition']).toMatch('attachment; filename=');
|
|
130
|
-
expect(res.body.length).toBeGreaterThan(0);
|
|
131
|
-
});
|
|
132
|
-
|
|
133
|
-
test('DELETE /gis-registry/:slug returns 200', async () => {
|
|
134
|
-
const res = await injectWithHeaders({
|
|
135
|
-
method: 'DELETE',
|
|
136
|
-
url: `/api/gis-registry/${testId}`,
|
|
137
|
-
});
|
|
138
|
-
|
|
139
|
-
expect(res.statusCode).toBe(200);
|
|
140
|
-
expect(res.body).toHaveProperty('register_id');
|
|
141
|
-
expect(res.body).toHaveProperty('register_key');
|
|
142
|
-
expect(res.body).toHaveProperty('name');
|
|
143
|
-
expect(res.body).toHaveProperty('table_name');
|
|
144
|
-
});
|
|
1
|
+
import { afterAll, beforeAll, describe, expect, test } from 'vitest';
|
|
2
|
+
|
|
3
|
+
import { getPGAsync } from '@opengis/fastify-table/utils.js';
|
|
4
|
+
|
|
5
|
+
import { build, injectWithHeaders } from '../../../test/helper.js';
|
|
6
|
+
|
|
7
|
+
let pg;
|
|
8
|
+
|
|
9
|
+
beforeAll(async () => {
|
|
10
|
+
await build();
|
|
11
|
+
|
|
12
|
+
pg = await getPGAsync();
|
|
13
|
+
|
|
14
|
+
await cleanUp('before');
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
afterAll(async () => {
|
|
18
|
+
await cleanUp('after');
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
const testId = 'testRegister';
|
|
22
|
+
|
|
23
|
+
const cleanUp = async (when) => {
|
|
24
|
+
if (!pg) return;
|
|
25
|
+
const rowCount2 = await pg.query('delete from gis.registers where register_id=$1', [testId]).then(r => r.rowCount || 0);
|
|
26
|
+
console.log(`clean up finished: ${when}`, rowCount2);
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
describe('GIS routes', () => {
|
|
30
|
+
test('GET /gis-registry/:slug returns 200', async () => {
|
|
31
|
+
const { slug, table } = await pg.query('SELECT register_id as slug, table_name as table FROM gis.registers where table_name is not null limit 1').then(r => r.rows[0]) || {};
|
|
32
|
+
const pkey = pg.pk?.[table];
|
|
33
|
+
expect(pkey).toBeDefined();
|
|
34
|
+
|
|
35
|
+
const res = await injectWithHeaders({
|
|
36
|
+
url: `/api/gis-registry/${slug}`,
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
expect(res.statusCode).toBe(200);
|
|
40
|
+
[
|
|
41
|
+
"total", "limit", "page", "register_id", "name", "card", "table_name", "register_key", "description",
|
|
42
|
+
"rows", "service_id", "columns", "filters", "fields", "view", "is_downloadable", "is_map", "is_register",
|
|
43
|
+
"is_files", "config"
|
|
44
|
+
].forEach(key => expect(res.body).toHaveProperty(key));
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
test('GET /gis-registry/:slug/:objectId returns 200', async () => {
|
|
48
|
+
const { slug, table } = await pg.query('SELECT register_id as slug, table_name as table FROM gis.registers where table_name is not null limit 1').then(r => r.rows[0]) || {};
|
|
49
|
+
const pkey = pg.pk?.[table];
|
|
50
|
+
expect(pkey).toBeDefined();
|
|
51
|
+
|
|
52
|
+
const objectId = await pg.query(`select ${pkey} from ${table} limit 1`).then(r => r.rows?.[0]?.[pkey]);
|
|
53
|
+
expect(objectId).toBeDefined();
|
|
54
|
+
|
|
55
|
+
const url = `/api/gis-registry/${slug}/${objectId}`;
|
|
56
|
+
const res = await injectWithHeaders({
|
|
57
|
+
url,
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
expect(res.statusCode, url).toBe(200);
|
|
61
|
+
[
|
|
62
|
+
"row", "card", "d", "columns", "is_downloadable", "register_key", "register_id", "service_id",
|
|
63
|
+
"name", "is_files", "is_map", "is_register"
|
|
64
|
+
].forEach(key => expect(res.body).toHaveProperty(key));
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
test('GET /gis-registry returns 200', async () => {
|
|
68
|
+
const res = await injectWithHeaders({
|
|
69
|
+
url: '/api/gis-registry',
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
expect(res.statusCode).toBe(200);
|
|
73
|
+
["rows", "total", "page", "limit", "offset"].forEach(key => expect(res.body).toHaveProperty(key));
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
test('POST /gis-registry returns 200', async () => {
|
|
77
|
+
const table = pg.tlist.find(el => el.includes('parcel') || el.includes('address') || el.includes('street')) || pg.tlist[0];
|
|
78
|
+
await pg.query('delete from gis.registers where register_id=$1', [testId]);
|
|
79
|
+
|
|
80
|
+
const payload = {
|
|
81
|
+
register_key: 'unit-test',
|
|
82
|
+
name: 'unit-test',
|
|
83
|
+
table_name: table
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
const res = await injectWithHeaders({
|
|
87
|
+
method: 'POST',
|
|
88
|
+
url: `/api/gis-registry/${testId}`,
|
|
89
|
+
payload
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
expect(res.statusCode).toBe(200);
|
|
93
|
+
expect(res.body).toHaveProperty('register_id');
|
|
94
|
+
expect(res.body).toHaveProperty('register_key');
|
|
95
|
+
expect(res.body).toHaveProperty('name');
|
|
96
|
+
expect(res.body.name).toBe(payload.name);
|
|
97
|
+
expect(res.body).toHaveProperty('table_name');
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
test('PUT /gis-registry/:slug returns 200', async () => {
|
|
101
|
+
const payload = {
|
|
102
|
+
name: 'unit-test edited',
|
|
103
|
+
};
|
|
104
|
+
const res = await injectWithHeaders({
|
|
105
|
+
method: 'PUT',
|
|
106
|
+
url: `/api/gis-registry/${testId}`,
|
|
107
|
+
payload
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
expect(res.statusCode).toBe(200);
|
|
111
|
+
expect(res.body).toHaveProperty('register_id');
|
|
112
|
+
expect(res.body).toHaveProperty('register_key');
|
|
113
|
+
expect(res.body).toHaveProperty('name');
|
|
114
|
+
expect(res.body.name).toBe(payload.name);
|
|
115
|
+
expect(res.body).toHaveProperty('table_name');
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
// ! before delete
|
|
119
|
+
test('GET /gis-export/:type/:slug returns 200', async () => {
|
|
120
|
+
const res = await injectWithHeaders({
|
|
121
|
+
url: `/api/gis-export/register/${testId}`,
|
|
122
|
+
format: 'csv'
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
expect(res.statusCode).toBe(200);
|
|
126
|
+
expect(res.headers).toHaveProperty('content-type');
|
|
127
|
+
expect(res.headers['content-type']).toBe('text/csv');
|
|
128
|
+
expect(res.headers).toHaveProperty('content-disposition');
|
|
129
|
+
expect(res.headers['content-disposition']).toMatch('attachment; filename=');
|
|
130
|
+
expect(res.body.length).toBeGreaterThan(0);
|
|
131
|
+
});
|
|
132
|
+
|
|
133
|
+
test('DELETE /gis-registry/:slug returns 200', async () => {
|
|
134
|
+
const res = await injectWithHeaders({
|
|
135
|
+
method: 'DELETE',
|
|
136
|
+
url: `/api/gis-registry/${testId}`,
|
|
137
|
+
});
|
|
138
|
+
|
|
139
|
+
expect(res.statusCode).toBe(200);
|
|
140
|
+
expect(res.body).toHaveProperty('register_id');
|
|
141
|
+
expect(res.body).toHaveProperty('register_key');
|
|
142
|
+
expect(res.body).toHaveProperty('name');
|
|
143
|
+
expect(res.body).toHaveProperty('table_name');
|
|
144
|
+
});
|
|
145
145
|
});
|