feat: merged demo into dev #43
@@ -36,7 +36,7 @@ function createNode(id: string, type: string, position: XYPosition, data: Record
|
|||||||
position,
|
position,
|
||||||
deletable,
|
deletable,
|
||||||
data: {
|
data: {
|
||||||
...defaultData,
|
...JSON.parse(JSON.stringify(defaultData)),
|
||||||
...data,
|
...data,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -141,7 +141,11 @@ export function NormConnectionSource(_thisNode: Node, _targetNodeId: string) {
|
|||||||
* @param _sourceNodeId the source of the disconnected connection
|
* @param _sourceNodeId the source of the disconnected connection
|
||||||
*/
|
*/
|
||||||
export function NormDisconnectionTarget(_thisNode: Node, _sourceNodeId: string) {
|
export function NormDisconnectionTarget(_thisNode: Node, _sourceNodeId: string) {
|
||||||
// no additional connection logic exists yet
|
const data = _thisNode.data as NormNodeData;
|
||||||
|
// If we got a belief connected, this is a condition for the norm.
|
||||||
|
if ((useFlowStore.getState().nodes.find((node) => node.id === _sourceNodeId && node.type === 'basic_belief' /* TODO: Add the option for an inferred belief */))) {
|
||||||
|
data.conditions = data.conditions.filter(id => id != _sourceNodeId);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -930,14 +930,24 @@ describe('NormNode', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
// Simulate connecting
|
// Simulate connecting
|
||||||
NormConnectionTarget(mockNode, mockBelief1.id);
|
useFlowStore.getState().onConnect({
|
||||||
NormConnectionTarget(mockNode, mockBelief2.id);
|
source: 'basic_belief-1',
|
||||||
BasicBeliefConnectionSource(mockBelief1, mockNode.id);
|
target: 'norm-1',
|
||||||
BasicBeliefConnectionSource(mockBelief2, mockNode.id);
|
sourceHandle: null,
|
||||||
|
targetHandle: null,
|
||||||
|
});
|
||||||
|
useFlowStore.getState().onConnect({
|
||||||
|
source: 'basic_belief-2',
|
||||||
|
target: 'norm-1',
|
||||||
|
sourceHandle: null,
|
||||||
|
targetHandle: null,
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
const state = useFlowStore.getState();
|
const state = useFlowStore.getState();
|
||||||
const updatedNorm = state.nodes.find(n => n.id === 'norm-1');
|
const updatedNorm = state.nodes.find(n => n.id === 'norm-1');
|
||||||
expect(updatedNorm?.data.conditions).toBe(["basic_belief-1", "basic_belief-2"]);
|
console.log(updatedNorm?.data.conditions);
|
||||||
|
expect(updatedNorm?.data.conditions).toEqual(["basic_belief-1", "basic_belief-1", "basic_belief-2"]);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ import { createElement } from 'react';
|
|||||||
import useFlowStore from '../../../../../src/pages/VisProgPage/visualProgrammingUI/VisProgStores';
|
import useFlowStore from '../../../../../src/pages/VisProgPage/visualProgrammingUI/VisProgStores';
|
||||||
|
|
||||||
|
|
||||||
describe('NormNode', () => {
|
describe('Universal Nodes', () => {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
jest.clearAllMocks();
|
jest.clearAllMocks();
|
||||||
});
|
});
|
||||||
@@ -109,6 +109,50 @@ describe('NormNode', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('Disconnecting', () => {
|
||||||
|
test.each(getAllTypes())('it should remove the correct data when something is disconnected on a %s node.', (nodeType) => {
|
||||||
|
// Create two nodes - one of the current type and one to connect to
|
||||||
|
const sourceNode = createNode('source-1', nodeType, {x: 100, y: 100}, {});
|
||||||
|
const targetNode = createNode('target-1', 'basic_belief', {x: 300, y: 100}, {});
|
||||||
|
|
||||||
|
// Add nodes to store
|
||||||
|
useFlowStore.setState({ nodes: [sourceNode, targetNode] });
|
||||||
|
|
||||||
|
// Spy on the connect functions
|
||||||
|
const sourceConnectSpy = jest.spyOn(NodeConnections.Sources, nodeType as keyof typeof NodeConnections.Sources);
|
||||||
|
const targetConnectSpy = jest.spyOn(NodeConnections.Targets, 'basic_belief');
|
||||||
|
|
||||||
|
// Simulate connection
|
||||||
|
useFlowStore.getState().onConnect({
|
||||||
|
source: 'source-1',
|
||||||
|
target: 'target-1',
|
||||||
|
sourceHandle: null,
|
||||||
|
targetHandle: null,
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
// Verify the connect functions were called
|
||||||
|
expect(sourceConnectSpy).toHaveBeenCalledWith(sourceNode, targetNode.id);
|
||||||
|
expect(targetConnectSpy).toHaveBeenCalledWith(targetNode, sourceNode.id);
|
||||||
|
|
||||||
|
// Find this connection, and delete it
|
||||||
|
const edge = useFlowStore.getState().edges[0];
|
||||||
|
useFlowStore.getState().onEdgesDelete([edge]);
|
||||||
|
|
||||||
|
// Find the nodes in the flow
|
||||||
|
const newSourceNode = useFlowStore.getState().nodes.find((node) => node.id == "source-1");
|
||||||
|
const newTargetNode = useFlowStore.getState().nodes.find((node) => node.id == "target-1");
|
||||||
|
|
||||||
|
// Expect them to be the same after deleting the edges
|
||||||
|
expect(newSourceNode).toBe(sourceNode);
|
||||||
|
expect(newTargetNode).toBe(targetNode);
|
||||||
|
|
||||||
|
// Restore our spies
|
||||||
|
sourceConnectSpy.mockRestore();
|
||||||
|
targetConnectSpy.mockRestore();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
describe('Reducing', () => {
|
describe('Reducing', () => {
|
||||||
test.each(getAllTypes())('it should correctly call/ not call the reduce function when %s node is in a phase', (nodeType) => {
|
test.each(getAllTypes())('it should correctly call/ not call the reduce function when %s node is in a phase', (nodeType) => {
|
||||||
// Create a phase node and a node of the current type
|
// Create a phase node and a node of the current type
|
||||||
|
|||||||
Reference in New Issue
Block a user