Merge pull request #2351 from automatisch/delete-folder
fix: Unassign flow folders before removing folder
This commit is contained in:
@@ -4,7 +4,7 @@ export default async (request, response) => {
|
|||||||
.findById(request.params.folderId)
|
.findById(request.params.folderId)
|
||||||
.throwIfNotFound();
|
.throwIfNotFound();
|
||||||
|
|
||||||
await folder.$query().delete();
|
await folder.delete();
|
||||||
|
|
||||||
response.status(204).end();
|
response.status(204).end();
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import Base from './base.js';
|
import Base from './base.js';
|
||||||
import User from './user.js';
|
import User from './user.js';
|
||||||
|
import Flow from './flow.js';
|
||||||
|
|
||||||
class Folder extends Base {
|
class Folder extends Base {
|
||||||
static tableName = 'folders';
|
static tableName = 'folders';
|
||||||
@@ -24,7 +25,20 @@ class Folder extends Base {
|
|||||||
to: 'users.id',
|
to: 'users.id',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
flows: {
|
||||||
|
relation: Base.HasManyRelation,
|
||||||
|
modelClass: Flow,
|
||||||
|
join: {
|
||||||
|
from: 'folders.id',
|
||||||
|
to: 'flows.folder_id',
|
||||||
|
},
|
||||||
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
async delete() {
|
||||||
|
await this.$relatedQuery('flows').patch({ folderId: null });
|
||||||
|
await this.$query().delete();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export default Folder;
|
export default Folder;
|
||||||
|
|||||||
@@ -1,7 +1,11 @@
|
|||||||
import { describe, it, expect } from 'vitest';
|
import { describe, it, expect } from 'vitest';
|
||||||
import Folder from './folder';
|
import Folder from './folder';
|
||||||
import User from './user';
|
import User from './user';
|
||||||
|
import Flow from './flow';
|
||||||
import Base from './base';
|
import Base from './base';
|
||||||
|
import { createFolder } from '../../test/factories/folder';
|
||||||
|
import { createFlow } from '../../test/factories/flow';
|
||||||
|
import { createUser } from '../../test/factories/user';
|
||||||
|
|
||||||
describe('Folder model', () => {
|
describe('Folder model', () => {
|
||||||
it('tableName should return correct name', () => {
|
it('tableName should return correct name', () => {
|
||||||
@@ -24,8 +28,40 @@ describe('Folder model', () => {
|
|||||||
to: 'users.id',
|
to: 'users.id',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
flows: {
|
||||||
|
relation: Base.HasManyRelation,
|
||||||
|
modelClass: Flow,
|
||||||
|
join: {
|
||||||
|
from: 'folders.id',
|
||||||
|
to: 'flows.folder_id',
|
||||||
|
},
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
expect(relationMappings).toStrictEqual(expectedRelations);
|
expect(relationMappings).toStrictEqual(expectedRelations);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('delete', () => {
|
||||||
|
it('should set folderId to null for all related flows before deleting the folder', async () => {
|
||||||
|
const user = await createUser();
|
||||||
|
|
||||||
|
const folder = await createFolder({ userId: user.id });
|
||||||
|
const flow = await createFlow({ folderId: folder.id, userId: user.id });
|
||||||
|
|
||||||
|
await folder.delete();
|
||||||
|
|
||||||
|
const refetchedFlow = await flow.$query();
|
||||||
|
expect(refetchedFlow.folderId).toBe(null);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should delete the folder', async () => {
|
||||||
|
const user = await createUser();
|
||||||
|
const folder = await createFolder({ userId: user.id });
|
||||||
|
|
||||||
|
await folder.delete();
|
||||||
|
|
||||||
|
const deletedFolder = await Folder.query().findById(folder.id);
|
||||||
|
expect(deletedFolder).toBeUndefined();
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user