84 lines
4.2 KiB
TypeScript
84 lines
4.2 KiB
TypeScript
import {ruleResult} from "../../../../src/pages/VisProgPage/visualProgrammingUI/HandleRuleLogic.ts";
|
|
import {
|
|
allowOnlyConnectionsFromType,
|
|
allowOnlyConnectionsFromHandle, noSelfConnections
|
|
} from "../../../../src/pages/VisProgPage/visualProgrammingUI/HandleRules.ts";
|
|
import useFlowStore from "../../../../src/pages/VisProgPage/visualProgrammingUI/VisProgStores.tsx";
|
|
|
|
beforeEach(() => {
|
|
useFlowStore.setState({
|
|
nodes: [
|
|
{ id: 'nodeA', type: 'typeA', position: { x: 0, y: 0 }, data: {} },
|
|
{ id: 'nodeB', type: 'typeB', position: { x: 0, y: 0 }, data: {} },
|
|
],
|
|
});
|
|
});
|
|
|
|
describe('allowOnlyConnectionsFromType', () => {
|
|
it('should allow connection from allowed node type', () => {
|
|
const rule = allowOnlyConnectionsFromType(['typeA']);
|
|
const connection = { source: 'nodeA', sourceHandle: 'h1', target: 'nodeB', targetHandle: 'h2' };
|
|
const context = { connectionCount: 0, source: { id: 'nodeA', handleId: 'h1' }, target: { id: 'nodeB', handleId: 'h2' } };
|
|
|
|
const result = rule(connection, context);
|
|
expect(result).toEqual(ruleResult.satisfied);
|
|
});
|
|
|
|
it('should not allow connection from disallowed node type', () => {
|
|
const rule = allowOnlyConnectionsFromType(['typeA']);
|
|
const connection = { source: 'nodeB', sourceHandle: 'h1', target: 'nodeA', targetHandle: 'h2' };
|
|
const context = { connectionCount: 0, source: { id: 'nodeB', handleId: 'h1' }, target: { id: 'nodeA', handleId: 'h2' } };
|
|
|
|
const result = rule(connection, context);
|
|
expect(result).toEqual(ruleResult.notSatisfied("the target doesn't allow connections from nodes with type: typeB"));
|
|
});
|
|
});
|
|
describe('allowOnlyConnectionsFromHandle', () => {
|
|
it('should allow connection from node with correct type and handle', () => {
|
|
const rule = allowOnlyConnectionsFromHandle([{ nodeType: 'typeA', handleId: 'h1' }]);
|
|
const connection = { source: 'nodeA', sourceHandle: 'h1', target: 'nodeB', targetHandle: 'h2' };
|
|
const context = { connectionCount: 0, source: { id: 'nodeA', handleId: 'h1' }, target: { id: 'nodeB', handleId: 'h2' } };
|
|
|
|
const result = rule(connection, context);
|
|
expect(result).toEqual(ruleResult.satisfied);
|
|
});
|
|
|
|
it('should not allow connection from node with wrong handle', () => {
|
|
const rule = allowOnlyConnectionsFromHandle([{ nodeType: 'typeA', handleId: 'h1' }]);
|
|
const connection = { source: 'nodeA', sourceHandle: 'wrongHandle', target: 'nodeB', targetHandle: 'h2' };
|
|
const context = { connectionCount: 0, source: { id: 'nodeA', handleId: 'wrongHandle' }, target: { id: 'nodeB', handleId: 'h2' } };
|
|
|
|
const result = rule(connection, context);
|
|
expect(result).toEqual(ruleResult.notSatisfied("the target doesn't allow connections from nodes with type: typeA"));
|
|
});
|
|
|
|
it('should not allow connection from node with wrong type', () => {
|
|
const rule = allowOnlyConnectionsFromHandle([{ nodeType: 'typeA', handleId: 'h1' }]);
|
|
const connection = { source: 'nodeB', sourceHandle: 'h1', target: 'nodeA', targetHandle: 'h2' };
|
|
const context = { connectionCount: 0, source: { id: 'nodeB', handleId: 'h1' }, target: { id: 'nodeA', handleId: 'h2' } };
|
|
|
|
const result = rule(connection, context);
|
|
expect(result).toEqual(ruleResult.notSatisfied("the target doesn't allow connections from nodes with type: typeB"));
|
|
});
|
|
});
|
|
|
|
describe('noSelfConnections', () => {
|
|
it('should allow connection from node with other type and handle', () => {
|
|
const rule = noSelfConnections;
|
|
const connection = { source: 'nodeA', sourceHandle: 'h1', target: 'nodeB', targetHandle: 'h2' };
|
|
const context = { connectionCount: 0, source: { id: 'nodeA', handleId: 'h1' }, target: { id: 'nodeB', handleId: 'h2' } };
|
|
|
|
const result = rule(connection, context);
|
|
expect(result).toEqual(ruleResult.satisfied);
|
|
});
|
|
|
|
it('should not allow connection from other handle on same node', () => {
|
|
const rule = noSelfConnections;
|
|
const connection = { source: 'nodeA', sourceHandle: 'h1', target: 'nodeA', targetHandle: 'h2' };
|
|
const context = { connectionCount: 0, source: { id: 'nodeA', handleId: 'h1' }, target: { id: 'nodeB', handleId: 'h2' } };
|
|
|
|
const result = rule(connection, context);
|
|
expect(result).toEqual(ruleResult.notSatisfied("nodes are not allowed to connect to themselves"));
|
|
});
|
|
|
|
}); |