@shopware-ag/dive
Version:
Shopware Spatial Framework
121 lines (96 loc) • 3.69 kB
text/typescript
import { DIVENode } from '../Node';
import { DIVECommunication } from '../../com/Communication';
import { Vector3, Box3, Mesh, Color, Euler } from 'three';
import { type DIVEGroup } from '../../group/Group';
jest.mock('../../com/Communication.ts', () => {
return {
DIVECommunication: {
get: jest.fn(() => {
return {
PerformAction: jest.fn(),
};
}),
},
};
});
jest.spyOn(DIVECommunication, 'get').mockReturnValue({
PerformAction: jest.fn(),
} as unknown as DIVECommunication);
let node: DIVENode;
describe('dive/node/DIVENode', () => {
beforeEach(() => {
node = new DIVENode();
});
afterEach(() => {
jest.clearAllMocks();
});
it('should instantiate', () => {
expect(node).toBeDefined();
});
it('should set position', () => {
const spySet = jest.spyOn(node.position, 'set');
const spyCopy = jest.spyOn(node.position, 'copy');
// without a parent, the node should only set it's local position
node.parent = null;
expect(() => node.SetPosition({ x: 1, y: 2, z: 3 })).not.toThrow();
expect(spySet).toHaveBeenCalledWith(1, 2, 3);
expect(spyCopy).not.toHaveBeenCalled();
// with a parent, the node should set it's position relative to the parent
spySet.mockClear();
spyCopy.mockClear();
node.parent = {
worldToLocal: jest.fn(() => new Vector3(4, 5, 6)),
isDIVEGroup: true,
UpdateLineTo: jest.fn(),
} as unknown as DIVENode;
const spyUpdateLineTo = jest.spyOn(
node.parent as DIVEGroup,
'UpdateLineTo',
);
expect(() => node.SetPosition({ x: 4, y: 5, z: 6 })).not.toThrow();
expect(spySet).not.toHaveBeenCalled();
expect(spyCopy).toHaveBeenCalledWith(
expect.objectContaining({ x: 4, y: 5, z: 6 }),
);
});
it('should set rotation', () => {
expect(() => node.SetRotation({ x: 0, y: 0, z: 0 })).not.toThrow();
});
it('should set scale', () => {
expect(() => node.SetScale({ x: 1, y: 1, z: 1 })).not.toThrow();
});
it('should set visibility', () => {
expect(() => node.SetVisibility(true)).not.toThrow();
});
it('should set to world origin', () => {
node.userData.id = 'something';
expect(() => node.SetToWorldOrigin()).not.toThrow();
expect(node.position.x).toBe(0);
expect(node.position.y).toBe(0);
expect(node.position.z).toBe(0);
jest.spyOn(DIVECommunication, 'get').mockReturnValueOnce(undefined);
expect(() => node.SetToWorldOrigin()).not.toThrow();
});
it('should onMove', () => {
node.userData.id = 'something';
node.parent = {
isDIVEGroup: true,
UpdateLineTo: jest.fn(),
} as unknown as DIVENode;
expect(() => node.onMove()).not.toThrow();
jest.spyOn(DIVECommunication, 'get').mockReturnValueOnce(undefined);
expect(() => node.onMove()).not.toThrow();
});
it('should onSelect', () => {
node.userData.id = 'something';
expect(() => node.onSelect()).not.toThrow();
jest.spyOn(DIVECommunication, 'get').mockReturnValueOnce(undefined);
expect(() => node.onSelect()).not.toThrow();
});
it('should onDeselect', () => {
node.userData.id = 'something';
expect(() => node.onDeselect()).not.toThrow();
jest.spyOn(DIVECommunication, 'get').mockReturnValueOnce(undefined);
expect(() => node.onDeselect()).not.toThrow();
});
});