Base {skillBreakdown.characteristic}: {skillBreakdown.base}
diff --git a/src/tests/missionTab.test.js b/src/tests/missionTab.test.js
index 9896e0b..a1d994d 100644
--- a/src/tests/missionTab.test.js
+++ b/src/tests/missionTab.test.js
@@ -1,5 +1,5 @@
import React from 'react';
-import { render, screen, waitFor } from '@testing-library/react';
+import { fireEvent, render, screen, waitFor } from '@testing-library/react';
import '@testing-library/jest-dom';
import axios from 'axios';
import MissionTab from '../components/MissionTab';
@@ -65,7 +65,7 @@ describe('MissionTab player view', () => {
expect(screen.getByText('The kill-team translates into a silent system.')).toBeInTheDocument();
expect(screen.getByText('Secure the landing zone')).toBeInTheDocument();
- expect(screen.getByText('Spot movement')).toBeInTheDocument();
+ expect(screen.getAllByText('Spot movement').length).toBeGreaterThan(0);
expect(screen.getByText('Open in Dice Roller')).toBeInTheDocument();
expect(screen.queryByText('Table State')).not.toBeInTheDocument();
expect(screen.queryByText('GM')).not.toBeInTheDocument();
@@ -81,3 +81,54 @@ describe('MissionTab player view', () => {
expect(axios.get).not.toHaveBeenCalledWith('/api/missions/active/current');
});
});
+
+describe('MissionTab mini skill modifiers', () => {
+ beforeEach(() => {
+ jest.clearAllMocks();
+ const activeMission = {
+ ...mission,
+ scenes: [{
+ ...mission.scenes[0],
+ checks: [
+ { name: 'Spot movement', skill: 'Awareness', characteristic: 'Per', target: 45, modifier: 0, reward: 'Act before the ambush.' },
+ ],
+ }],
+ };
+
+ axios.get.mockImplementation((url) => {
+ if (url === '/api/missions') return Promise.resolve({ data: [activeMission] });
+ if (url === '/api/missions/active/current') return Promise.resolve({ data: activeMission });
+ if (url === '/api/missions/active/rolls/feed?limit=50') return Promise.resolve({ data: [] });
+ if (url === '/api/players') return Promise.resolve({ data: [{ name: 'anders' }] });
+ if (url === '/api/players/anders') {
+ return Promise.resolve({
+ data: {
+ name: 'anders',
+ tabInfo: {
+ characteristics: { Per: 40 },
+ skills: { 'Awareness (Per)': { trained: true } },
+ wounds: { current: 20, total: 20 },
+ },
+ },
+ });
+ }
+ return Promise.resolve({ data: null });
+ });
+ });
+
+ test('uses skill difficulty and skill condition modifiers for a mission skill check target', async () => {
+ render(
);
+
+ await waitFor(() => expect(screen.getAllByText('Mini Roller').length).toBeGreaterThan(0));
+ await waitFor(() => expect(screen.getAllByTestId('skill-target-number')[0]).toHaveTextContent('40'));
+
+ fireEvent.change(screen.getAllByLabelText('Skill difficulty')[0], { target: { value: '30' } });
+ expect(screen.getAllByTestId('skill-target-number')[0]).toHaveTextContent('70');
+
+ fireEvent.click(screen.getAllByText('Poor/no tools -10')[0]);
+ expect(screen.getAllByTestId('skill-target-number')[0]).toHaveTextContent('60');
+
+ fireEvent.change(screen.getAllByLabelText('Skill custom modifier')[0], { target: { value: '-5' } });
+ expect(screen.getAllByTestId('skill-target-number')[0]).toHaveTextContent('55');
+ });
+});