mirror of
https://github.com/MontFerret/ferret.git
synced 2024-12-14 11:23:02 +02:00
Updated pagination iterator (#338)
* Updated pagination iterator * Added e2e test * Fixed e2e tests
This commit is contained in:
parent
22382a0f61
commit
14c487ca46
@ -4,13 +4,14 @@ import FormsPage from './pages/forms/index.js';
|
|||||||
import EventsPage from './pages/events/index.js';
|
import EventsPage from './pages/events/index.js';
|
||||||
import IframePage from './pages/iframes/index.js';
|
import IframePage from './pages/iframes/index.js';
|
||||||
import MediaPage from './pages/media/index.js';
|
import MediaPage from './pages/media/index.js';
|
||||||
|
import PaginationPage from './pages/pagination/index.js';
|
||||||
|
|
||||||
const e = React.createElement;
|
const e = React.createElement;
|
||||||
const Router = ReactRouter.Router;
|
const Router = ReactRouter.Router;
|
||||||
const Switch = ReactRouter.Switch;
|
const Switch = ReactRouter.Switch;
|
||||||
const Route = ReactRouter.Route;
|
const Route = ReactRouter.Route;
|
||||||
const Redirect = ReactRouter.Redirect;
|
const Redirect = ReactRouter.Redirect;
|
||||||
const createBrowserHistory = History.createBrowserHistory;
|
const createHistory = History.createHashHistory;
|
||||||
|
|
||||||
export default React.memo(function AppComponent(params = {}) {
|
export default React.memo(function AppComponent(params = {}) {
|
||||||
let redirectTo;
|
let redirectTo;
|
||||||
@ -32,7 +33,7 @@ export default React.memo(function AppComponent(params = {}) {
|
|||||||
redirectTo = e(Redirect, { to });
|
redirectTo = e(Redirect, { to });
|
||||||
}
|
}
|
||||||
|
|
||||||
return e(Router, { history: createBrowserHistory() },
|
return e(Router, { history: createHistory() },
|
||||||
e(Layout, null, [
|
e(Layout, null, [
|
||||||
e(Switch, null, [
|
e(Switch, null, [
|
||||||
e(Route, {
|
e(Route, {
|
||||||
@ -56,6 +57,10 @@ export default React.memo(function AppComponent(params = {}) {
|
|||||||
path: '/media',
|
path: '/media',
|
||||||
component: MediaPage
|
component: MediaPage
|
||||||
}),
|
}),
|
||||||
|
e(Route, {
|
||||||
|
path: '/pagination',
|
||||||
|
component: PaginationPage
|
||||||
|
}),
|
||||||
]),
|
]),
|
||||||
redirectTo
|
redirectTo
|
||||||
])
|
])
|
||||||
|
59
e2e/pages/dynamic/components/pages/pagination/index.js
Normal file
59
e2e/pages/dynamic/components/pages/pagination/index.js
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
const e = React.createElement;
|
||||||
|
const Pagination = ReactBootstrap.Pagination;
|
||||||
|
const Item = Pagination.Item;
|
||||||
|
|
||||||
|
export default class PaginationPage extends React.Component {
|
||||||
|
min = 1;
|
||||||
|
max = 5;
|
||||||
|
|
||||||
|
constructor(props) {
|
||||||
|
super(props);
|
||||||
|
|
||||||
|
this.state = {
|
||||||
|
active: 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
handleClick(number) {
|
||||||
|
if (number > this.max || number < this.min) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.setState({
|
||||||
|
active: number
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
render() {
|
||||||
|
const items = [];
|
||||||
|
|
||||||
|
items.push(e(Pagination.Prev, {
|
||||||
|
className: "page-item-prev",
|
||||||
|
disabled: this.state.active === this.min,
|
||||||
|
onClick: this.handleClick.bind(this, this.state.active - 1)
|
||||||
|
}));
|
||||||
|
|
||||||
|
for (let number = this.min; number <= this.max; number++) {
|
||||||
|
items.push(
|
||||||
|
e(Item, {
|
||||||
|
key: number,
|
||||||
|
active: number === this.state.active,
|
||||||
|
onClick: this.handleClick.bind(this, number)
|
||||||
|
}, number)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
items.push(e(Pagination.Next, {
|
||||||
|
className: "page-item-next",
|
||||||
|
disabled: this.state.active === this.max,
|
||||||
|
onClick: this.handleClick.bind(this, this.state.active + 1)
|
||||||
|
}));
|
||||||
|
|
||||||
|
return e("div", { className: "row"}, [
|
||||||
|
e("div", { className: "col-12" }, [
|
||||||
|
e(Pagination, {
|
||||||
|
}, items)
|
||||||
|
])
|
||||||
|
])
|
||||||
|
}
|
||||||
|
}
|
@ -6,7 +6,7 @@
|
|||||||
<title>Ferret E2E SPA</title>
|
<title>Ferret E2E SPA</title>
|
||||||
<meta name="description" content="">
|
<meta name="description" content="">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||||
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
|
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
|
||||||
<link rel="stylesheet" href="index.css">
|
<link rel="stylesheet" href="index.css">
|
||||||
</head>
|
</head>
|
||||||
<body class="text-center">
|
<body class="text-center">
|
||||||
@ -16,6 +16,7 @@
|
|||||||
<script src="https://unpkg.com/history@4.9.0/umd/history.min.js"></script>
|
<script src="https://unpkg.com/history@4.9.0/umd/history.min.js"></script>
|
||||||
<script src="https://unpkg.com/react-router@4.3.1/umd/react-router.js"></script>
|
<script src="https://unpkg.com/react-router@4.3.1/umd/react-router.js"></script>
|
||||||
<script src="https://unpkg.com/react-router-dom@4.3.1/umd/react-router-dom.js"></script>
|
<script src="https://unpkg.com/react-router-dom@4.3.1/umd/react-router-dom.js"></script>
|
||||||
|
<script src="https://unpkg.com/react-bootstrap@next/dist/react-bootstrap.min.js" crossorigin> </script>
|
||||||
<script src="index.js" type="module"></script>
|
<script src="index.js" type="module"></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
@ -2,25 +2,26 @@ LET url = @dynamic
|
|||||||
LET doc = DOCUMENT(url, true)
|
LET doc = DOCUMENT(url, true)
|
||||||
|
|
||||||
LET expected = `<head>
|
LET expected = `<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<meta http-equiv="x-ua-compatible" content="ie=edge">
|
<meta http-equiv="x-ua-compatible" content="ie=edge">
|
||||||
<title>Ferret E2E SPA</title>
|
<title>Ferret E2E SPA</title>
|
||||||
<meta name="description" content="">
|
<meta name="description" content="">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||||
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
|
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
|
||||||
<link rel="stylesheet" href="index.css">
|
<link rel="stylesheet" href="index.css">
|
||||||
</head>
|
</head>
|
||||||
<body class="text-center">
|
<body class="text-center">
|
||||||
<div id="root"><div id="layout"><nav class="navbar navbar-expand-md navbar-dark bg-dark mb-4" id="navbar"><a class="navbar-brand active" aria-current="page" href="/">Ferret</a><button class="navbar-toggler" type="button"><span class="navbar-toggler-icon"></span></button><div class="collapse navbar-collapse"><ul class="navbar-nav mr-auto"><li class="nav-item"><a class="nav-link" href="/forms">Forms</a></li><li class="nav-item"><a class="nav-link" href="/navigation">Navigation</a></li><li class="nav-item"><a class="nav-link" href="/events">Events</a></li><li class="nav-item"><a class="nav-link" href="/iframe">iFrame</a></li></ul></div></nav><main class="container"><div class="jumbotron" data-type="page" id="index"><div><h1>Welcome to Ferret E2E test page!</h1></div><div><p class="lead">It has several pages for testing different possibilities of the library</p></div></div></main></div></div>
|
<div id="root"><div id="layout"><nav class="navbar navbar-expand-md navbar-dark bg-dark mb-4" id="navbar"><a class="navbar-brand active" aria-current="page" href="#/">Ferret</a><button class="navbar-toggler" type="button"><span class="navbar-toggler-icon"></span></button><div class="collapse navbar-collapse"><ul class="navbar-nav mr-auto"><li class="nav-item"><a class="nav-link" href="#/forms">Forms</a></li><li class="nav-item"><a class="nav-link" href="#/navigation">Navigation</a></li><li class="nav-item"><a class="nav-link" href="#/events">Events</a></li><li class="nav-item"><a class="nav-link" href="#/iframe">iFrame</a></li></ul></div></nav><main class="container"><div class="jumbotron" data-type="page" id="index"><div><h1>Welcome to Ferret E2E test page!</h1></div><div><p class="lead">It has several pages for testing different possibilities of the library</p></div></div></main></div></div>
|
||||||
<script src="https://unpkg.com/react@16.8.6/umd/react.production.min.js"></script>
|
<script src="https://unpkg.com/react@16.8.6/umd/react.production.min.js"></script>
|
||||||
<script src="https://unpkg.com/react-dom@16.8.6/umd/react-dom.production.min.js"></script>
|
<script src="https://unpkg.com/react-dom@16.8.6/umd/react-dom.production.min.js"></script>
|
||||||
<script src="https://unpkg.com/history@4.9.0/umd/history.min.js"></script>
|
<script src="https://unpkg.com/history@4.9.0/umd/history.min.js"></script>
|
||||||
<script src="https://unpkg.com/react-router@4.3.1/umd/react-router.js"></script>
|
<script src="https://unpkg.com/react-router@4.3.1/umd/react-router.js"></script>
|
||||||
<script src="https://unpkg.com/react-router-dom@4.3.1/umd/react-router-dom.js"></script>
|
<script src="https://unpkg.com/react-router-dom@4.3.1/umd/react-router-dom.js"></script>
|
||||||
<script src="index.js" type="module"></script>
|
<script src="https://unpkg.com/react-bootstrap@next/dist/react-bootstrap.min.js" crossorigin=""> </script>
|
||||||
|
<script src="index.js" type="module"></script>
|
||||||
|
|
||||||
|
|
||||||
</body>`
|
</body>`
|
||||||
LET actual = INNER_HTML(doc)
|
LET actual = INNER_HTML(doc)
|
||||||
|
|
||||||
LET r1 = '(\s|\")'
|
LET r1 = '(\s|\")'
|
||||||
|
9
e2e/tests/dynamic/doc/pagination.fql
Normal file
9
e2e/tests/dynamic/doc/pagination.fql
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
LET url = @dynamic + "/#/pagination"
|
||||||
|
LET page = DOCUMENT(url, true)
|
||||||
|
|
||||||
|
LET items = (
|
||||||
|
FOR i IN PAGINATION(page, 'li[class="page-item-next page-item"]')
|
||||||
|
RETURN i
|
||||||
|
)
|
||||||
|
|
||||||
|
RETURN EXPECT(5, LENGTH(items))
|
@ -2,7 +2,7 @@ LET url = @dynamic
|
|||||||
LET doc = DOCUMENT(url, true)
|
LET doc = DOCUMENT(url, true)
|
||||||
LET el = ELEMENT(doc, "#root")
|
LET el = ELEMENT(doc, "#root")
|
||||||
|
|
||||||
LET expected = `<div id="layout"><nav class="navbar navbar-expand-md navbar-dark bg-dark mb-4" id="navbar"><a class="navbar-brand active" aria-current="page" href="/">Ferret</a><button class="navbar-toggler" type="button"><span class="navbar-toggler-icon"></span></button><div class="collapse navbar-collapse"><ul class="navbar-nav mr-auto"><li class="nav-item"><a class="nav-link" href="/forms">Forms</a></li><li class="nav-item"><a class="nav-link" href="/navigation">Navigation</a></li><li class="nav-item"><a class="nav-link" href="/events">Events</a></li><li class="nav-item"><a class="nav-link" href="/iframe">iFrame</a></li></ul></div></nav><main class="container"><div class="jumbotron" data-type="page" id="index"><div><h1>Welcome to Ferret E2E test page!</h1></div><div><p class="lead">It has several pages for testing different possibilities of the library</p></div></div></main></div>`
|
LET expected = `<div id="layout"><nav class="navbar navbar-expand-md navbar-dark bg-dark mb-4" id="navbar"><a class="navbar-brand active" aria-current="page" href="#/">Ferret</a><button class="navbar-toggler" type="button"><span class="navbar-toggler-icon"></span></button><div class="collapse navbar-collapse"><ul class="navbar-nav mr-auto"><li class="nav-item"><a class="nav-link" href="#/forms">Forms</a></li><li class="nav-item"><a class="nav-link" href="#/navigation">Navigation</a></li><li class="nav-item"><a class="nav-link" href="#/events">Events</a></li><li class="nav-item"><a class="nav-link" href="#/iframe">iFrame</a></li></ul></div></nav><main class="container"><div class="jumbotron" data-type="page" id="index"><div><h1>Welcome to Ferret E2E test page!</h1></div><div><p class="lead">It has several pages for testing different possibilities of the library</p></div></div></main></div>`
|
||||||
LET actual = INNER_HTML(el)
|
LET actual = INNER_HTML(el)
|
||||||
|
|
||||||
LET r1 = '(\s|\")'
|
LET r1 = '(\s|\")'
|
||||||
|
@ -92,16 +92,16 @@ func (i *PagingIterator) Next(ctx context.Context) (core.Value, core.Value, erro
|
|||||||
return values.ZeroInt, values.ZeroInt, nil
|
return values.ZeroInt, values.ZeroInt, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
clicked, err := i.document.ClickBySelector(ctx, i.selector)
|
if !i.document.ExistsBySelector(ctx, i.selector) {
|
||||||
|
return values.ZeroInt, values.ZeroInt, core.ErrNoMoreData
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err := i.document.ClickBySelector(ctx, i.selector)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return values.None, values.None, err
|
return values.None, values.None, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if clicked {
|
|
||||||
return i.pos, i.pos, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// terminate
|
// terminate
|
||||||
return values.None, values.None, nil
|
return i.pos, i.pos, nil
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user