mirror of
https://gitee.com/nocobase/nocobase.git
synced 2024-12-02 12:18:15 +08:00
fix: e2e-failed (#3828)
* fix: e2e-failed * fix: ci * fix: ci bug * fix: ci(skip server ci) * fix: ci [skip ci] * fix: ci(skip server ci) * fix: ci * fix: ci * fix: remove skip if --------- Co-authored-by: dream2023 <1098626505@qq.com>
This commit is contained in:
parent
78697e02be
commit
d04a60d386
8
.github/workflows/nocobase-test-backend.yml
vendored
8
.github/workflows/nocobase-test-backend.yml
vendored
@ -13,6 +13,8 @@ on:
|
|||||||
- 'packages/core/acl/**'
|
- 'packages/core/acl/**'
|
||||||
- 'packages/core/actions/**'
|
- 'packages/core/actions/**'
|
||||||
- 'packages/core/database/**'
|
- 'packages/core/database/**'
|
||||||
|
- 'packages/core/resourcer/**'
|
||||||
|
- 'packages/core/data-source-manager/**'
|
||||||
- 'packages/core/server/**'
|
- 'packages/core/server/**'
|
||||||
- 'packages/core/utils/**'
|
- 'packages/core/utils/**'
|
||||||
- 'packages/plugins/**/src/server/**'
|
- 'packages/plugins/**/src/server/**'
|
||||||
@ -23,6 +25,8 @@ on:
|
|||||||
- 'packages/core/acl/**'
|
- 'packages/core/acl/**'
|
||||||
- 'packages/core/actions/**'
|
- 'packages/core/actions/**'
|
||||||
- 'packages/core/database/**'
|
- 'packages/core/database/**'
|
||||||
|
- 'packages/core/resourcer/**'
|
||||||
|
- 'packages/core/data-source-manager/**'
|
||||||
- 'packages/core/server/**'
|
- 'packages/core/server/**'
|
||||||
- 'packages/core/utils/**'
|
- 'packages/core/utils/**'
|
||||||
- 'packages/plugins/**/src/server/**'
|
- 'packages/plugins/**/src/server/**'
|
||||||
@ -30,7 +34,6 @@ on:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
sqlite-test:
|
sqlite-test:
|
||||||
if: "!contains(github.event.head_commit.message, 'skip server ci'))"
|
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
node_version: ['18']
|
node_version: ['18']
|
||||||
@ -68,7 +71,6 @@ jobs:
|
|||||||
timeout-minutes: 40
|
timeout-minutes: 40
|
||||||
|
|
||||||
postgres-test:
|
postgres-test:
|
||||||
if: "!contains(github.event.head_commit.message, 'skip server ci'))"
|
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
node_version: ['18']
|
node_version: ['18']
|
||||||
@ -133,7 +135,6 @@ jobs:
|
|||||||
timeout-minutes: 40
|
timeout-minutes: 40
|
||||||
|
|
||||||
mysql-test:
|
mysql-test:
|
||||||
if: "!contains(github.event.head_commit.message, 'skip server ci'))"
|
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
node_version: ['18']
|
node_version: ['18']
|
||||||
@ -184,7 +185,6 @@ jobs:
|
|||||||
DB_TEST_PREFIX: test_
|
DB_TEST_PREFIX: test_
|
||||||
timeout-minutes: 40
|
timeout-minutes: 40
|
||||||
mariadb-test:
|
mariadb-test:
|
||||||
if: "!contains(github.event.head_commit.message, 'skip server ci'))"
|
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
node_version: ['18']
|
node_version: ['18']
|
||||||
|
1
.github/workflows/nocobase-test-e2e.yml
vendored
1
.github/workflows/nocobase-test-e2e.yml
vendored
@ -21,7 +21,6 @@ on:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
e2e-test-postgres:
|
e2e-test-postgres:
|
||||||
if: "!contains(github.event.head_commit.message, 'skip e2e ci'))"
|
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
node_version: ['18']
|
node_version: ['18']
|
||||||
|
1
.github/workflows/nocobase-test-frontend.yml
vendored
1
.github/workflows/nocobase-test-frontend.yml
vendored
@ -29,7 +29,6 @@ on:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
frontend-test:
|
frontend-test:
|
||||||
if: "!contains(github.event.head_commit.message, 'skip client ci'))"
|
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
node_version: [ '18' ]
|
node_version: [ '18' ]
|
||||||
|
@ -2,9 +2,9 @@ import { isValid } from '@formily/shared';
|
|||||||
import { toFixedByStep } from '@nocobase/utils/client';
|
import { toFixedByStep } from '@nocobase/utils/client';
|
||||||
import type { InputProps } from 'antd/es/input';
|
import type { InputProps } from 'antd/es/input';
|
||||||
import type { InputNumberProps } from 'antd/es/input-number';
|
import type { InputNumberProps } from 'antd/es/input-number';
|
||||||
|
import { format } from 'd3-format';
|
||||||
import * as math from 'mathjs';
|
import * as math from 'mathjs';
|
||||||
import React, { useMemo } from 'react';
|
import React, { useMemo } from 'react';
|
||||||
import { format } from 'd3-format';
|
|
||||||
|
|
||||||
function countDecimalPlaces(value) {
|
function countDecimalPlaces(value) {
|
||||||
const number = Number(value);
|
const number = Number(value);
|
||||||
@ -20,7 +20,7 @@ const separators = {
|
|||||||
'0.00': { thousands: '', decimal: '.' }, // 没有千位分隔符
|
'0.00': { thousands: '', decimal: '.' }, // 没有千位分隔符
|
||||||
};
|
};
|
||||||
//分隔符换算
|
//分隔符换算
|
||||||
export function formatNumberWithSeparator(number, format = '0,0.00', step = 1) {
|
export function formatNumberWithSeparator(number, format = '0.00', step = 1) {
|
||||||
let formattedNumber = '';
|
let formattedNumber = '';
|
||||||
|
|
||||||
if (separators[format]) {
|
if (separators[format]) {
|
||||||
@ -75,20 +75,23 @@ export function scientificNotation(number, decimalPlaces, separator = '.') {
|
|||||||
const result = formattedNumber.replace(/e([+-]?\d+)/, (match, exponent) => {
|
const result = formattedNumber.replace(/e([+-]?\d+)/, (match, exponent) => {
|
||||||
if (exponent.startsWith('+')) {
|
if (exponent.startsWith('+')) {
|
||||||
// 正数指数,不显示符号
|
// 正数指数,不显示符号
|
||||||
return ` × 10<sup>${exponent.slice(1)}</sup>`;
|
return `×10<sup>${exponent.slice(1)}</sup>`;
|
||||||
} else {
|
} else {
|
||||||
// 负数指数,显示 "-" 符号
|
// 负数指数,显示 "-" 符号
|
||||||
return ` × 10<sup>-${exponent.slice(1)}</sup>`;
|
return `×10<sup>-${exponent.slice(1)}</sup>`;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
export const ReadPretty: React.FC<InputProps & InputNumberProps> = (props: any) => {
|
|
||||||
const { step, formatStyle, value, addonBefore, addonAfter, unitConversion, unitConversionType, separator } = props;
|
export function formatNumber(props) {
|
||||||
if (!isValid(props.value)) {
|
const { step, formatStyle, value, unitConversion, unitConversionType, separator = '0.00' } = props;
|
||||||
|
|
||||||
|
if (!isValid(value)) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
//单位换算
|
//单位换算
|
||||||
const unitData = formatUnitConversion(value, unitConversionType, unitConversion);
|
const unitData = formatUnitConversion(value, unitConversionType, unitConversion);
|
||||||
//精度换算
|
//精度换算
|
||||||
@ -100,10 +103,20 @@ export const ReadPretty: React.FC<InputProps & InputNumberProps> = (props: any)
|
|||||||
//科学计数显示
|
//科学计数显示
|
||||||
result = scientificNotation(Number(unitData), countDecimalPlaces(step), separators?.[separator]?.['decimal']);
|
result = scientificNotation(Number(unitData), countDecimalPlaces(step), separators?.[separator]?.['decimal']);
|
||||||
}
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
if (!result) {
|
export const ReadPretty: React.FC<InputProps & InputNumberProps> = (props: any) => {
|
||||||
|
const { step, formatStyle, value, addonBefore, addonAfter, unitConversion, unitConversionType, separator } = props;
|
||||||
|
|
||||||
|
const result = useMemo(() => {
|
||||||
|
return formatNumber({ step, formatStyle, value, unitConversion, unitConversionType, separator });
|
||||||
|
}, [step, formatStyle, value, unitConversion, unitConversionType, separator]);
|
||||||
|
|
||||||
|
if (!isValid(result)) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className={'nb-read-pretty-input-number'}>
|
<div className={'nb-read-pretty-input-number'}>
|
||||||
{addonBefore}
|
{addonBefore}
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
import { fireEvent, render, screen } from '@nocobase/test/client';
|
import { fireEvent, render, screen } from '@nocobase/test/client';
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
|
import { formatNumberWithSeparator, formatUnitConversion, scientificNotation } from '../ReadPretty';
|
||||||
import App2 from '../demos/addonBefore&addonAfter';
|
import App2 from '../demos/addonBefore&addonAfter';
|
||||||
import App3 from '../demos/highPrecisionDecimals';
|
import App3 from '../demos/highPrecisionDecimals';
|
||||||
import App1 from '../demos/inputNumber';
|
import App1 from '../demos/inputNumber';
|
||||||
import { formatNumberWithSeparator, formatUnitConversion, scientificNotation } from '../ReadPretty';
|
|
||||||
|
|
||||||
describe('InputNumber', () => {
|
describe('InputNumber', () => {
|
||||||
it('should display the title', () => {
|
it('should display the title', () => {
|
||||||
@ -81,13 +81,13 @@ describe('ReadPretty:formatNumberWithSeparator', () => {
|
|||||||
// Test case 1: Format a number with default format '0,0.00'
|
// Test case 1: Format a number with default format '0,0.00'
|
||||||
test('Format number with default separator', () => {
|
test('Format number with default separator', () => {
|
||||||
const formatted = formatNumberWithSeparator(1234567.89);
|
const formatted = formatNumberWithSeparator(1234567.89);
|
||||||
expect(formatted).toBe('1,234,567.9');
|
expect(formatted).toBe('1234567.9');
|
||||||
});
|
});
|
||||||
|
|
||||||
// Test case 2: Format a number with custom format '0.00'
|
// Test case 2: Format a number with custom format '0.00'
|
||||||
test('Format number with custom separator', () => {
|
test('Format number with custom separator', () => {
|
||||||
const formatted = formatNumberWithSeparator(1234567.89, '0.00', 1);
|
const formatted = formatNumberWithSeparator(1234567.89, '0,0.00', 1);
|
||||||
expect(formatted).toBe('1234567.9');
|
expect(formatted).toBe('1,234,567.9');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
describe('ReadPretty:formatUnitConversion', () => {
|
describe('ReadPretty:formatUnitConversion', () => {
|
||||||
@ -101,18 +101,23 @@ describe('ReadPretty:formatUnitConversion', () => {
|
|||||||
const result = formatUnitConversion(10, '/', 0);
|
const result = formatUnitConversion(10, '/', 0);
|
||||||
expect(result).toBe(10);
|
expect(result).toBe(10);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('0.1*0.2', () => {
|
||||||
|
const result = formatUnitConversion(0.1, '*', 0.2);
|
||||||
|
expect(result).toBe(0.02);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('ReadPretty:scientificNotation', () => {
|
describe('ReadPretty:scientificNotation', () => {
|
||||||
// Test case 1: Format a number into scientific notation with 2 decimal places
|
// Test case 1: Format a number into scientific notation with 2 decimal places
|
||||||
test('Format number into scientific notation', () => {
|
test('Format number into scientific notation', () => {
|
||||||
const formatted = scientificNotation(1234567.89, 2);
|
const formatted = scientificNotation(1234567.89, 2);
|
||||||
expect(formatted).toBe('1.23 × 10<sup>6</sup>');
|
expect(formatted).toBe('1.23×10<sup>6</sup>');
|
||||||
});
|
});
|
||||||
|
|
||||||
// Test case 2: Format a number into scientific notation with custom separator '.'
|
// Test case 2: Format a number into scientific notation with custom separator '.'
|
||||||
test('Format number into scientific notation with custom separator', () => {
|
test('Format number into scientific notation with custom separator', () => {
|
||||||
const formatted = scientificNotation(1234567.89, 2, '.');
|
const formatted = scientificNotation(1234567.89, 2, '.');
|
||||||
expect(formatted).toBe('1.23 × 10<sup>6</sup>');
|
expect(formatted).toBe('1.23×10<sup>6</sup>');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
Loading…
Reference in New Issue
Block a user