Skip to content

Commit e9b91c3

Browse files
committed
feat(router): edit test and type def
1 parent 5aff2d7 commit e9b91c3

4 files changed

Lines changed: 75 additions & 17 deletions

File tree

src/app/containers/App.test.tsx

Lines changed: 40 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,47 @@
1-
import {TestHelper} from "../helpers/TestHelper";
2-
import {App, Styles} from "./App";
1+
import {shallow} from "enzyme";
2+
import * as React from "react";
3+
import {IntlProvider} from "react-intl";
4+
import {State as IRouteState} from "router5";
5+
import {IState} from "../redux/modules/baseModule";
6+
import {ILanguage} from "../redux/modules/languageModule";
7+
import {Styles, UnconnectedApp} from "./App";
38

49
describe("<App />", () => {
5-
const component = (new TestHelper())
6-
.withState({language: {payload: {locale: "en", languageData: {}}}})
7-
.mount(App);
10+
const language: IState<ILanguage> = {
11+
payload: {
12+
languageData: {greeting: "Hello!"},
13+
locale: "en-GB"
14+
}
15+
};
16+
const route: IRouteState = {
17+
name: "home",
18+
params: {},
19+
path: "/"
20+
};
21+
const routeUnavailable: IRouteState = {
22+
name: "unavailable",
23+
params: {},
24+
path: "/"
25+
};
826

9-
it("Renders with correct style", () => {
27+
it("renders with correct style", () => {
28+
const component = shallow(<UnconnectedApp language={language} route={route} />);
1029
expect(component.find("section")).toHaveClassName(Styles.container);
1130
});
1231

32+
it("renders IntlProvider with correct props", () => {
33+
const component = shallow(<UnconnectedApp language={language} route={route} />);
34+
expect(component.find(IntlProvider)).toHaveProp("locale", language.payload.locale);
35+
expect(component.find(IntlProvider)).toHaveProp("messages", language.payload.languageData);
36+
});
37+
38+
it("renders Not Found when route is null", () => {
39+
const component = shallow(<UnconnectedApp language={language} route={null} />);
40+
expect(component.find("div")).toHaveText("Not found");
41+
});
42+
43+
it("renders Not Found when segment is undefined", () => {
44+
const component = shallow(<UnconnectedApp language={language} route={routeUnavailable} />);
45+
expect(component.find("div")).toHaveText("Not found");
46+
});
1347
});

src/app/containers/App.tsx

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,18 @@ import * as es from "react-intl/locale-data/es";
88
import * as fr from "react-intl/locale-data/fr";
99
import {connect} from "react-redux";
1010
import {routeNodeSelector} from "redux-router5";
11+
import {State as IRouteState} from "router5";
1112
import {cssRaw, cssRule, style} from "typestyle";
1213

1314
import {Header} from "../components";
14-
import {AboutPage, CounterPage, HomePage, StarsPage} from "./index";
15+
import {IStore} from "../redux/IStore";
16+
import {IState} from "../redux/modules/baseModule";
17+
import {ILanguage} from "../redux/modules/languageModule";
18+
import {AboutPage} from "./AboutPage";
19+
import {CounterPage} from "./CounterPage";
20+
import {HomePage} from "./HomePage";
21+
import {RegisterPage} from "./RegisterPage";
22+
import {StarsPage} from "./StarsPage";
1523

1624
const appConfig = require("../../../config/main");
1725

@@ -33,38 +41,45 @@ const Styles = {
3341
})
3442
};
3543

36-
class App extends React.Component<any, any> {
44+
class App extends React.Component<IStateToProps, null> {
3745
private components: any = {
3846
about: AboutPage,
3947
counter: CounterPage,
4048
home: HomePage,
49+
register: RegisterPage,
4150
stars: StarsPage
4251
};
52+
4353
constructor() {
4454
super();
4555
addLocaleData([...en, ...es, ...fr, ...de]);
4656
}
4757

4858
public render(): JSX.Element {
49-
const {route} = this.props;
59+
const {language, route} = this.props;
5060
const segment = route ? route.name.split(".")[0] : undefined;
5161
return (
52-
<IntlProvider locale={this.props.languages.payload.locale} messages={this.props.languages.payload.languageData}>
62+
<IntlProvider locale={language.payload.locale} messages={language.payload.languageData}>
5363
<section className={Styles.container}>
5464
<Helmet {...appConfig.app.head}/>
5565
<Header />
56-
{React.createElement(this.components[segment]) || <div>Not found</div>}
66+
{segment && this.components[segment] ? React.createElement(this.components[segment]) : <div>Not found</div>}
5767
</section>
5868
</IntlProvider>
5969
);
6070
}
6171
}
6272

63-
const mapStateToProps = (state) => ({
73+
interface IStateToProps {
74+
language: IState<ILanguage>;
75+
route: IRouteState;
76+
}
77+
78+
const mapStateToProps = (state: Partial<IStore>) => ({
6479
languages: state.language,
6580
...routeNodeSelector("")(state)
6681
});
6782

68-
const connectedApp = connect(mapStateToProps)(App);
83+
const connectedApp = connect<IStateToProps, null, null>(mapStateToProps, null)(App);
6984

70-
export {connectedApp as App, Styles}
85+
export {connectedApp as App, App as UnconnectedApp, Styles}

src/app/redux/IStore.ts

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,19 @@
1-
import {ICounter} from "modules/counterModule";
2-
import {IStars} from "modules/starsModule";
1+
import {State as IRouteState} from "router5";
32
import {IState} from "./modules/baseModule";
3+
import {ICounter} from "./modules/counterModule";
44
import {ILanguage} from "./modules/languageModule";
5+
import {IStars} from "./modules/starsModule";
6+
7+
export interface IRouteReduxState {
8+
route: IRouteState;
9+
previousRoute?: IRouteState;
10+
transitionRoute?: IRouteState;
11+
transitionError?: string;
12+
}
513

614
export interface IStore {
715
counter: IState<ICounter>;
816
language: IState<ILanguage>;
9-
router: any;
17+
router: IRouteReduxState;
1018
stars: IState<IStars>;
1119
}

src/app/routes/routes.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ const routes: IRoute[] = [
77
{name: "home", path: "/"},
88
{name: "about", path: "/about"},
99
{name: "counter", path: "/counter"},
10+
{name: "register", path: "/register"},
1011
{name: "stars", path: "/stars"}
1112
];
1213

0 commit comments

Comments
 (0)