DEV;Fix tests, lint and build
This commit is contained in:
parent
8a8cf962d8
commit
40deb32d91
17 changed files with 81 additions and 110 deletions
|
@ -26,6 +26,7 @@ module.exports.append = (config) => {
|
||||||
config.resolve.extensions.push('.ts', '.tsx', '.mdx', '.json', 'txt');
|
config.resolve.extensions.push('.ts', '.tsx', '.mdx', '.json', 'txt');
|
||||||
config.resolve.alias = {
|
config.resolve.alias = {
|
||||||
...config.resolve.alias,
|
...config.resolve.alias,
|
||||||
|
config: path.join(__dirname, '../../config'),
|
||||||
'@treejs/components': path.join(__dirname, '../../packages/components/src'),
|
'@treejs/components': path.join(__dirname, '../../packages/components/src'),
|
||||||
'@treejs/api': path.join(__dirname, '../../packages/api/src'),
|
'@treejs/api': path.join(__dirname, '../../packages/api/src'),
|
||||||
'@treejs/auth': path.join(__dirname, '../../packages/auth/src'),
|
'@treejs/auth': path.join(__dirname, '../../packages/auth/src'),
|
||||||
|
|
8
Jenkinsfile
vendored
8
Jenkinsfile
vendored
|
@ -7,13 +7,7 @@ setup {
|
||||||
}
|
}
|
||||||
|
|
||||||
node {
|
node {
|
||||||
checkCodeStability({
|
checkCodeStability({})
|
||||||
postInstallClosure = { isOnlyDeploy ->
|
|
||||||
stageWhen('typedoc', !isOnlyDeploy, {
|
|
||||||
sh 'npm run build:doc'
|
|
||||||
})
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
release({
|
release({
|
||||||
publishToNPM({
|
publishToNPM({
|
||||||
|
|
|
@ -1,37 +0,0 @@
|
||||||
interface AppConfig {
|
|
||||||
BASE_ENDPOINT_URL: string;
|
|
||||||
CLIENT_PORT?: number;
|
|
||||||
SELENIUM_IP: string;
|
|
||||||
SELENIUM_PORT: number;
|
|
||||||
SERVER_IP: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
let config: AppConfig = {
|
|
||||||
SELENIUM_IP: '192.168.0.40',
|
|
||||||
SELENIUM_PORT: 4444,
|
|
||||||
|
|
||||||
SERVER_IP: 'localhost',
|
|
||||||
CLIENT_PORT: 80,
|
|
||||||
|
|
||||||
BASE_ENDPOINT_URL: 'https://jsonplaceholder.typicode.com',
|
|
||||||
};
|
|
||||||
|
|
||||||
// API and E2E types
|
|
||||||
if (process.env.APP_ENV === 'CI') {
|
|
||||||
config = {
|
|
||||||
...config,
|
|
||||||
SERVER_IP: '192.168.0.40',
|
|
||||||
CLIENT_PORT: 89,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
// start server with this setting
|
|
||||||
if (process.env.APP_ENV === 'test') {
|
|
||||||
config = {
|
|
||||||
...config,
|
|
||||||
SERVER_IP: '0.0.0.0',
|
|
||||||
CLIENT_PORT: 89,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
export default config;
|
|
6
config/config.json
Normal file
6
config/config.json
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"E2E_PORT": 9091,
|
||||||
|
"LOCALHOST_PORT": 6006,
|
||||||
|
|
||||||
|
"BASE_ENDPOINT_URL": "https://jsonplaceholder.typicode.com"
|
||||||
|
}
|
|
@ -8,16 +8,17 @@ module.exports = {
|
||||||
testRegex: '(/__tests__/.*|(-|/)(test))\\.tsx?$',
|
testRegex: '(/__tests__/.*|(-|/)(test))\\.tsx?$',
|
||||||
moduleFileExtensions: ['ts', 'tsx', 'js', 'json'],
|
moduleFileExtensions: ['ts', 'tsx', 'js', 'json'],
|
||||||
moduleNameMapper: {
|
moduleNameMapper: {
|
||||||
'^@treejs/components(.*)$': '<rootDir>/packages/treejs-components/src/$1',
|
'^config(.*)$': '<rootDir>/config/$1',
|
||||||
'^@treejs/api(.*)$': '<rootDir>/packages/treejs-api/src/$1',
|
'^@treejs/components(.*)$': '<rootDir>/packages/components/src/$1',
|
||||||
'^@treejs/auth(.*)$': '<rootDir>/packages/treejs-auth/src/$1',
|
'^@treejs/api(.*)$': '<rootDir>/packages/api/src/$1',
|
||||||
'^@treejs/constants(.*)$': '<rootDir>/packages/treejs-constants/src/$1',
|
'^@treejs/auth(.*)$': '<rootDir>/packages/auth/src/$1',
|
||||||
'^@treejs/utils(.*)$': '<rootDir>/packages/treejs-utils/src/$1',
|
'^@treejs/constants(.*)$': '<rootDir>/packages/constants/src/$1',
|
||||||
'^@treejs/forms(.*)$': '<rootDir>/packages/treejs-forms/src/$1',
|
'^@treejs/utils(.*)$': '<rootDir>/packages/utils/src/$1',
|
||||||
'^@treejs/hooks(.*)$': '<rootDir>/packages/treejs-forms/src/$1',
|
'^@treejs/forms(.*)$': '<rootDir>/packages/forms/src/$1',
|
||||||
'^@treejs/localization(.*)$': '<rootDir>/packages/treejs-localization/src/$1',
|
'^@treejs/hooks(.*)$': '<rootDir>/packages/forms/src/$1',
|
||||||
'^@treejs/styles(.*)$': '<rootDir>/packages/treejs-styles/src/$1',
|
'^@treejs/localization(.*)$': '<rootDir>/packages/localization/src/$1',
|
||||||
'^@treejs/types(.*)$': '<rootDir>/packages/treejs-types/src/$1',
|
'^@treejs/styles(.*)$': '<rootDir>/packages/styles/src/$1',
|
||||||
|
'^@treejs/types(.*)$': '<rootDir>/packages/types/src/$1',
|
||||||
'\\.(css|less|sass|scss)$': '<rootDir>/types/emptyMock.ts',
|
'\\.(css|less|sass|scss)$': '<rootDir>/types/emptyMock.ts',
|
||||||
},
|
},
|
||||||
collectCoverage: !!process.env.CI,
|
collectCoverage: !!process.env.CI,
|
||||||
|
@ -26,7 +27,6 @@ module.exports = {
|
||||||
|
|
||||||
// enzyme
|
// enzyme
|
||||||
snapshotSerializers: ['enzyme-to-json/serializer'],
|
snapshotSerializers: ['enzyme-to-json/serializer'],
|
||||||
setupFilesAfterEnv: ['./config/jestSetup.ts'],
|
|
||||||
|
|
||||||
globals: {
|
globals: {
|
||||||
'ts-jest': {
|
'ts-jest': {
|
||||||
|
|
|
@ -6,9 +6,9 @@ RUN apk add nginx --force
|
||||||
RUN mkdir app
|
RUN mkdir app
|
||||||
RUN mkdir -p /run/nginx
|
RUN mkdir -p /run/nginx
|
||||||
|
|
||||||
COPY ./dist /app/dist
|
COPY ./storybook-static /app/dist
|
||||||
COPY ./docker/nginx/conf.d/ /etc/nginx/conf.d/
|
COPY ./docker/nginx/conf.d/ /etc/nginx/conf.d/
|
||||||
|
|
||||||
EXPOSE 80 3330
|
EXPOSE 80
|
||||||
|
|
||||||
VOLUME [ "/etc/nginx/conf.d" ]
|
VOLUME [ "/etc/nginx/conf.d" ]
|
||||||
|
|
|
@ -4,10 +4,6 @@ server {
|
||||||
|
|
||||||
server_name _;
|
server_name _;
|
||||||
|
|
||||||
root /app/dist/client;
|
root /app/dist;
|
||||||
index index.html;
|
index index.html;
|
||||||
|
|
||||||
location / {
|
|
||||||
try_files $uri $uri/ /index.html;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,11 +1,5 @@
|
||||||
var config = require('../e2e_app_config.json');
|
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
'Welcome page': function (browser) {
|
'Welcome page': function (browser) {
|
||||||
browser
|
browser.url(browser.launchUrl).waitForElementVisible('body', 1000).assert.title('Storybook').end();
|
||||||
.url('http://' + config.IP + ':' + config.PORT)
|
|
||||||
.waitForElementVisible('body', 1000)
|
|
||||||
.assert.title('Storybook')
|
|
||||||
.end();
|
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
{
|
|
||||||
"IP": "192.168.0.20",
|
|
||||||
"PORT": 9080
|
|
||||||
}
|
|
33
nightwatch.conf.js
Normal file
33
nightwatch.conf.js
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
const config = require('./config/config.json');
|
||||||
|
|
||||||
|
const setting = {
|
||||||
|
selenium_port: 4444,
|
||||||
|
selenium_host: '192.168.0.20',
|
||||||
|
desiredCapabilities: {
|
||||||
|
chromeOptions: {
|
||||||
|
args: ['headless', 'no-sandbox'],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
src_folders: 'e2e/',
|
||||||
|
output_folder: false,
|
||||||
|
selenium: {
|
||||||
|
start_process: false,
|
||||||
|
},
|
||||||
|
test_settings: {
|
||||||
|
localhost: Object.assign(
|
||||||
|
{
|
||||||
|
launch_url: 'http://192.168.0.120:' + config.LOCALHOST_PORT,
|
||||||
|
},
|
||||||
|
setting
|
||||||
|
),
|
||||||
|
ci: Object.assign(
|
||||||
|
{
|
||||||
|
launch_url: 'http://192.168.0.20:' + config.E2E_PORT,
|
||||||
|
},
|
||||||
|
setting
|
||||||
|
),
|
||||||
|
},
|
||||||
|
};
|
|
@ -1,21 +0,0 @@
|
||||||
{
|
|
||||||
"src_folders": "e2e/",
|
|
||||||
"output_folder": false,
|
|
||||||
"selenium": {
|
|
||||||
"start_process": false
|
|
||||||
},
|
|
||||||
"test_settings": {
|
|
||||||
"default": {
|
|
||||||
"selenium_port": 4444,
|
|
||||||
"selenium_host": "192.168.0.20",
|
|
||||||
"desiredCapabilities": {
|
|
||||||
"chromeOptions": {
|
|
||||||
"args": [
|
|
||||||
"headless",
|
|
||||||
"no-sandbox"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -8,20 +8,19 @@
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"postinstall": "lerna bootstrap",
|
"postinstall": "lerna bootstrap",
|
||||||
"storybook": "start-storybook -p 6006 -c .storybook --ci",
|
"storybook": "start-storybook -p 6006 -c .storybook --ci",
|
||||||
"storybook:build": "build-storybook",
|
|
||||||
"storybook:serve": "http-server storybook-static",
|
"storybook:serve": "http-server storybook-static",
|
||||||
"test": "jest -c config/jest.config.js",
|
"test": "jest -c config/jest.config.js",
|
||||||
"test:update": "npm run test -- -u",
|
"test:update": "npm run test -- -u",
|
||||||
|
"test-e2e": "nightwatch --env localhost",
|
||||||
"eslint": "eslint -c .eslintrc packages/**/*.{ts,tsx}",
|
"eslint": "eslint -c .eslintrc packages/**/*.{ts,tsx}",
|
||||||
"prettier": "prettier --check packages/**/*.ts",
|
"prettier": "prettier --check packages/**/*.ts",
|
||||||
"prettier:fix": "prettier --check --write packages/**/*.ts",
|
"prettier:fix": "prettier --check --write packages/**/*.ts",
|
||||||
"lint": "npm run eslint && npm run prettier",
|
"lint": "npm run eslint && npm run prettier",
|
||||||
"build:module": "lerna run build",
|
"build:module": "lerna run build",
|
||||||
"clean:module": "lerna run clean",
|
"clean:module": "lerna run clean",
|
||||||
"serve": "http-server dist/client",
|
|
||||||
"ci:lint": "cross-env CI=true npm run lint",
|
"ci:lint": "cross-env CI=true npm run lint",
|
||||||
"ci:test": "cross-env CI=true npm run test",
|
"ci:test": "cross-env CI=true npm run test",
|
||||||
"ci:test-e2e": "nightwatch",
|
"ci:test-e2e": "nightwatch --env ci",
|
||||||
"ci:build": "build-storybook",
|
"ci:build": "build-storybook",
|
||||||
"ci:increase-version": "lerna version --no-git-tag-version --no-push --yes"
|
"ci:increase-version": "lerna version --no-git-tag-version --no-push --yes"
|
||||||
},
|
},
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
import React, { useCallback, useEffect, useMemo, useState } from 'react';
|
import React, { useCallback, useEffect, useMemo, useState } from 'react';
|
||||||
import { is } from 'ramda';
|
|
||||||
|
|
||||||
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
||||||
import cx from 'classnames';
|
import cx from 'classnames';
|
||||||
|
|
|
@ -4,7 +4,6 @@ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
||||||
import cx from 'classnames';
|
import cx from 'classnames';
|
||||||
import { History } from 'history';
|
import { History } from 'history';
|
||||||
|
|
||||||
import Button from '@treejs/components/Button';
|
|
||||||
import { isNilOrEmpty } from '@treejs/utils';
|
import { isNilOrEmpty } from '@treejs/utils';
|
||||||
|
|
||||||
import Modals from '../../Modal/components/Modals';
|
import Modals from '../../Modal/components/Modals';
|
||||||
|
|
|
@ -1,25 +1,35 @@
|
||||||
|
import { initLocalization } from '@treejs/localization/init';
|
||||||
|
|
||||||
import { getPluralMessage } from '../message';
|
import { getPluralMessage } from '../message';
|
||||||
|
|
||||||
describe('Localization message', () => {
|
describe('Localization message', () => {
|
||||||
|
initLocalization('cs', {
|
||||||
|
cs: {
|
||||||
|
char: 'znak',
|
||||||
|
char_2: 'znaky',
|
||||||
|
char_5: 'znaku',
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
describe('getPluralMessage', () => {
|
describe('getPluralMessage', () => {
|
||||||
it('should return char_5 for 0 count', () => {
|
it('should return char_5 for 0 count', () => {
|
||||||
expect(getPluralMessage(0)('common:char')).toBe('common:char_5');
|
expect(getPluralMessage(0)('char')).toBe('znaku');
|
||||||
});
|
});
|
||||||
it('should return char for 1 count', () => {
|
it('should return char for 1 count', () => {
|
||||||
expect(getPluralMessage(1)('common:char')).toBe('common:char');
|
expect(getPluralMessage(1)('char')).toBe('znak');
|
||||||
expect(getPluralMessage(-1)('common:char')).toBe('common:char');
|
expect(getPluralMessage(-1)('char')).toBe('znak');
|
||||||
});
|
});
|
||||||
it('should return char_2 for 2 count', () => {
|
it('should return char_2 for 2 count', () => {
|
||||||
expect(getPluralMessage(2)('common:char')).toBe('common:char_2');
|
expect(getPluralMessage(2)('char')).toBe('znaky');
|
||||||
expect(getPluralMessage(-2)('common:char')).toBe('common:char_2');
|
expect(getPluralMessage(-2)('char')).toBe('znaky');
|
||||||
});
|
});
|
||||||
it('should return char_5 for 5 count', () => {
|
it('should return char_5 for 5 count', () => {
|
||||||
expect(getPluralMessage(5)('common:char')).toBe('common:char_5');
|
expect(getPluralMessage(5)('char')).toBe('znaku');
|
||||||
expect(getPluralMessage(-5)('common:char')).toBe('common:char_5');
|
expect(getPluralMessage(-5)('char')).toBe('znaku');
|
||||||
});
|
});
|
||||||
it('should return char_5 for 10 count', () => {
|
it('should return char_5 for 10 count', () => {
|
||||||
expect(getPluralMessage(10)('common:char')).toBe('common:char_5');
|
expect(getPluralMessage(10)('char')).toBe('znaku');
|
||||||
expect(getPluralMessage(-10)('common:char')).toBe('common:char_5');
|
expect(getPluralMessage(-10)('char')).toBe('znaku');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
|
|
||||||
import { combineReducers, configureStore, getDefaultMiddleware } from '@reduxjs/toolkit';
|
import { combineReducers, configureStore, getDefaultMiddleware } from '@reduxjs/toolkit';
|
||||||
|
import config from 'config/config.json';
|
||||||
import { Provider } from 'react-redux';
|
import { Provider } from 'react-redux';
|
||||||
|
|
||||||
import { API_REDUCER_NAME } from '@treejs/api/constants';
|
import { API_REDUCER_NAME } from '@treejs/api/constants';
|
||||||
|
@ -17,7 +18,7 @@ const store = configureStore({
|
||||||
middleware: [
|
middleware: [
|
||||||
...getDefaultMiddleware({ thunk: true }).concat(
|
...getDefaultMiddleware({ thunk: true }).concat(
|
||||||
apiMiddleware({
|
apiMiddleware({
|
||||||
BASE_ENDPOINT_URL: 'https://jsonplaceholder.typicode.com',
|
BASE_ENDPOINT_URL: config.BASE_ENDPOINT_URL,
|
||||||
})
|
})
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
|
|
|
@ -15,6 +15,7 @@
|
||||||
"jsx": "react",
|
"jsx": "react",
|
||||||
"baseUrl": "./",
|
"baseUrl": "./",
|
||||||
"paths": {
|
"paths": {
|
||||||
|
"config/*": ["./config/*"],
|
||||||
"@treejs/components/*": ["./packages/components/src/*"],
|
"@treejs/components/*": ["./packages/components/src/*"],
|
||||||
"@treejs/api/*": ["./packages/api/src/*"],
|
"@treejs/api/*": ["./packages/api/src/*"],
|
||||||
"@treejs/auth/*": ["./packages/auth/src/*"],
|
"@treejs/auth/*": ["./packages/auth/src/*"],
|
||||||
|
|
Loading…
Add table
Reference in a new issue