2021-08-23 03:10:14 -05:00
|
|
|
/////////////////////////////////////////////////////////////
|
|
|
|
//
|
|
|
|
// pgAdmin 4 - PostgreSQL Tools
|
|
|
|
//
|
2024-01-01 02:43:48 -06:00
|
|
|
// Copyright (C) 2013 - 2024, The pgAdmin Development Team
|
2021-08-23 03:10:14 -05:00
|
|
|
// This software is released under the PostgreSQL Licence
|
|
|
|
//
|
|
|
|
//////////////////////////////////////////////////////////////
|
|
|
|
|
2023-10-23 07:13:17 -05:00
|
|
|
|
2022-01-28 05:50:34 -06:00
|
|
|
import { SCHEMA_STATE_ACTIONS } from '../../../pgadmin/static/js/SchemaView';
|
2021-08-23 03:10:14 -05:00
|
|
|
import BaseUISchema from '../../../pgadmin/static/js/SchemaView/base_schema.ui';
|
|
|
|
import _ from 'lodash';
|
|
|
|
import PrimaryKeySchema from '../../../pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/index_constraint/static/js/primary_key.ui';
|
2021-10-04 08:58:27 -05:00
|
|
|
import TableSchema from '../../../pgadmin/browser/server_groups/servers/databases/schemas/tables/static/js/table.ui';
|
2023-10-23 07:13:17 -05:00
|
|
|
import {addNewDatagridRow, genericBeforeEach, getCreateView, getEditView, getPropertiesView} from '../genericFunctions';
|
2021-08-23 03:10:14 -05:00
|
|
|
|
|
|
|
class SchemaInColl extends BaseUISchema {
|
|
|
|
constructor(schemaObj) {
|
|
|
|
super();
|
|
|
|
this.schemaObj = schemaObj;
|
|
|
|
}
|
|
|
|
|
|
|
|
get baseFields() {
|
|
|
|
return [{
|
|
|
|
id: 'collection', label: '', type: 'collection',
|
|
|
|
schema: this.schemaObj,
|
|
|
|
editable: false,
|
|
|
|
canAdd: true, canEdit: false, canDelete: true, hasRole: true,
|
|
|
|
columns : ['name', 'columns'],
|
|
|
|
}];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function getFieldDepChange(schema, id) {
|
|
|
|
return _.find(schema.fields, (f)=>f.id==id)?.depChange;
|
|
|
|
}
|
|
|
|
|
|
|
|
describe('PrimaryKeySchema', ()=>{
|
2023-10-23 07:13:17 -05:00
|
|
|
|
2021-08-23 03:10:14 -05:00
|
|
|
let schemaObj;
|
|
|
|
let getInitData = ()=>Promise.resolve({});
|
|
|
|
|
|
|
|
beforeAll(()=>{
|
|
|
|
schemaObj = new PrimaryKeySchema({
|
|
|
|
spcname: ()=>Promise.resolve([]),
|
|
|
|
}, {});
|
|
|
|
});
|
|
|
|
|
|
|
|
beforeEach(()=>{
|
2022-01-28 05:50:34 -06:00
|
|
|
genericBeforeEach();
|
2021-08-23 03:10:14 -05:00
|
|
|
});
|
|
|
|
|
2023-10-23 07:13:17 -05:00
|
|
|
it('create', async ()=>{
|
|
|
|
await getCreateView(schemaObj);
|
2021-08-23 03:10:14 -05:00
|
|
|
});
|
|
|
|
|
2023-10-23 07:13:17 -05:00
|
|
|
it('edit', async ()=>{
|
|
|
|
await getEditView(schemaObj, getInitData);
|
2021-08-23 03:10:14 -05:00
|
|
|
});
|
|
|
|
|
2023-10-23 07:13:17 -05:00
|
|
|
it('properties', async ()=>{
|
|
|
|
await getPropertiesView(schemaObj, getInitData);
|
2021-08-23 03:10:14 -05:00
|
|
|
});
|
|
|
|
|
2023-10-23 07:13:17 -05:00
|
|
|
it('create collection', async ()=>{
|
2021-08-23 03:10:14 -05:00
|
|
|
let schemaCollObj = new SchemaInColl(schemaObj);
|
2023-10-23 07:13:17 -05:00
|
|
|
const {ctrl, user} = await getCreateView(schemaCollObj);
|
2021-08-23 03:10:14 -05:00
|
|
|
/* Make sure you hit every corner */
|
2023-10-23 07:13:17 -05:00
|
|
|
|
|
|
|
await addNewDatagridRow(user, ctrl);
|
2021-08-23 03:10:14 -05:00
|
|
|
});
|
|
|
|
|
|
|
|
it('depChange', ()=>{
|
|
|
|
let state = {columns: [{column: 'id'}]};
|
|
|
|
|
|
|
|
state.name = '';
|
|
|
|
expect(getFieldDepChange(schemaObj, 'comment')(state)).toEqual({
|
|
|
|
comment: '',
|
|
|
|
});
|
|
|
|
|
|
|
|
state.index = 'someindex';
|
|
|
|
expect(getFieldDepChange(schemaObj, 'spcname')(state)).toEqual({
|
|
|
|
spcname: '',
|
|
|
|
});
|
|
|
|
expect(getFieldDepChange(schemaObj, 'include')(state)).toEqual({
|
|
|
|
include: [],
|
|
|
|
});
|
|
|
|
expect(getFieldDepChange(schemaObj, 'fillfactor')(state)).toEqual({
|
|
|
|
fillfactor: null,
|
|
|
|
});
|
|
|
|
expect(getFieldDepChange(schemaObj, 'condeferrable')(state)).toEqual({
|
|
|
|
condeferrable: false,
|
|
|
|
});
|
|
|
|
expect(getFieldDepChange(schemaObj, 'condeferred')(state)).toEqual({
|
|
|
|
condeferred: false,
|
|
|
|
});
|
|
|
|
|
|
|
|
state.index = undefined;
|
2021-09-23 04:16:10 -05:00
|
|
|
state.condeferrable = true;
|
2021-08-23 03:10:14 -05:00
|
|
|
expect(getFieldDepChange(schemaObj, 'spcname')(state)).toEqual({});
|
|
|
|
expect(getFieldDepChange(schemaObj, 'include')(state)).toEqual({});
|
|
|
|
expect(getFieldDepChange(schemaObj, 'fillfactor')(state)).toEqual({});
|
|
|
|
expect(getFieldDepChange(schemaObj, 'condeferrable')(state)).toEqual({});
|
|
|
|
expect(getFieldDepChange(schemaObj, 'condeferred')(state)).toEqual({});
|
|
|
|
|
2021-10-04 08:58:27 -05:00
|
|
|
schemaObj.top = new TableSchema({}, null);
|
2021-08-23 03:10:14 -05:00
|
|
|
expect(getFieldDepChange(schemaObj, 'columns')(state, ['columns', 0], null, {
|
|
|
|
type: SCHEMA_STATE_ACTIONS.DELETE_ROW,
|
|
|
|
oldState: {
|
|
|
|
columns: [
|
|
|
|
{name: 'id'}
|
|
|
|
],
|
|
|
|
},
|
|
|
|
path: ['columns'],
|
|
|
|
value: 0,
|
|
|
|
})).toEqual({
|
|
|
|
columns: [],
|
|
|
|
});
|
|
|
|
|
|
|
|
expect(getFieldDepChange(schemaObj, 'columns')(state, ['columns', 0], {
|
|
|
|
columns: [
|
2024-06-17 03:37:45 -05:00
|
|
|
{name: 'id123', is_primary_key: true}
|
2021-08-23 03:10:14 -05:00
|
|
|
],
|
|
|
|
}, {
|
|
|
|
type: SCHEMA_STATE_ACTIONS.SET_VALUE,
|
|
|
|
oldState: {
|
|
|
|
columns: [
|
|
|
|
{name: 'id'}
|
|
|
|
],
|
|
|
|
},
|
|
|
|
path: ['columns', 0, 'name'],
|
|
|
|
value: 'id123',
|
|
|
|
})).toEqual({
|
|
|
|
columns: [{column: 'id123'}],
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
it('validate', ()=>{
|
|
|
|
let state = {};
|
2023-10-23 07:13:17 -05:00
|
|
|
let setError = jest.fn();
|
2021-08-23 03:10:14 -05:00
|
|
|
schemaObj.validate(state, setError);
|
|
|
|
expect(setError).toHaveBeenCalledWith('columns', 'Please specify columns for Primary key.');
|
|
|
|
|
|
|
|
state.columns = [{columns: 'id'}];
|
|
|
|
expect(schemaObj.validate(state, setError)).toBe(false);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|