Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
小 白蛋
Nomad
Commits
e863322b
Commit
e863322b
authored
3 years ago
by
Jai Bhagat
Committed by
Phil Renaud
3 years ago
Browse files
Options
Download
Email Patches
Plain Diff
refact: use filter expression dsl instead of named params
parent
e0d1b4a9
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
ui/app/routes/evaluations/index.js
+39
-9
ui/app/routes/evaluations/index.js
ui/tests/acceptance/evaluations-test.js
+77
-15
ui/tests/acceptance/evaluations-test.js
with
116 additions
and
24 deletions
+116
-24
ui/app/routes/evaluations/index.js
+
39
-
9
View file @
e863322b
...
...
@@ -37,20 +37,51 @@ export default class EvaluationsIndexRoute extends Route {
type
,
qpNamespace
:
namespace
,
})
{
const
generateFilter
=
()
=>
{
const
generateFilter
Expression
=
()
=>
{
const
searchFilter
=
searchTerm
?
`ID contains "
${
searchTerm
}
" or JobID contains "
${
searchTerm
}
" or NodeID contains "
${
searchTerm
}
" or TriggeredBy contains "
${
searchTerm
}
"`
:
null
;
const
typeFilter
=
type
===
'
client
'
?
`NodeID is not empty`
:
`NodeID is empty`
;
const
triggeredByFilter
=
`TriggeredBy contains "
${
triggeredBy
}
"`
;
const
statusFilter
=
`Status contains "
${
status
}
"`
;
if
(
searchTerm
&&
type
)
return
`
${
searchFilter
}
${
typeFilter
}
`
;
if
(
searchTerm
&&
triggeredBy
)
return
`
${
searchFilter
}
${
triggeredByFilter
}
`
;
if
(
searchTerm
)
return
searchFilter
;
if
(
type
)
return
typeFilter
;
if
(
triggeredBy
)
return
triggeredByFilter
;
let
filterExp
;
if
(
searchTerm
)
{
if
(
!
type
&&
!
status
&&
!
triggeredBy
)
{
return
searchFilter
;
}
filterExp
=
`(
${
searchFilter
}
)`
;
if
(
type
)
{
filterExp
=
`
${
filterExp
}
and
${
typeFilter
}
`
;
}
if
(
triggeredBy
)
{
filterExp
=
`
${
filterExp
}
and
${
triggeredByFilter
}
`
;
}
if
(
status
)
{
filterExp
=
`
${
filterExp
}
and
${
statusFilter
}
`
;
}
return
filterExp
;
}
if
(
type
||
status
||
triggeredBy
)
{
const
lookup
=
{
[
type
]:
typeFilter
,
[
status
]:
statusFilter
,
[
triggeredBy
]:
triggeredByFilter
,
};
filterExp
=
[
type
,
status
,
triggeredBy
].
reduce
((
result
,
filter
)
=>
{
const
expression
=
lookup
[
filter
];
if
(
!!
filter
&&
result
!==
''
)
{
result
=
result
.
concat
(
` and
${
expression
}
`
);
}
else
if
(
filter
)
{
result
=
expression
;
}
return
result
;
},
''
);
return
filterExp
;
}
return
null
;
};
...
...
@@ -61,8 +92,7 @@ export default class EvaluationsIndexRoute extends Route {
namespace
,
per_page
:
pageSize
,
next_token
:
nextToken
,
status
,
filter
:
generateFilter
(),
filter
:
generateFilterExpression
(),
});
}
}
This diff is collapsed.
Click to expand it.
ui/tests/acceptance/evaluations-test.js
+
77
-
15
View file @
e863322b
...
...
@@ -143,7 +143,6 @@ module('Acceptance | evaluations list', function (hooks) {
per_page
:
'
25
'
,
next_token
:
''
,
filter
:
''
,
status
:
''
,
},
'
Forwards the correct query parameters on default query when route initially loads
'
);
...
...
@@ -174,9 +173,8 @@ module('Acceptance | evaluations list', function (hooks) {
{
namespace
:
'
*
'
,
per_page
:
'
25
'
,
status
:
'
pending
'
,
next_token
:
''
,
filter
:
''
,
filter
:
'
Status contains "pending"
'
,
},
'
It makes another server request using the options selected by the user
'
);
...
...
@@ -206,7 +204,6 @@ module('Acceptance | evaluations list', function (hooks) {
per_page
:
'
25
'
,
next_token
:
''
,
filter
:
''
,
status
:
''
,
},
'
It makes another server request using the options selected by the user
'
);
...
...
@@ -234,7 +231,6 @@ module('Acceptance | evaluations list', function (hooks) {
{
namespace
:
'
*
'
,
per_page
:
'
25
'
,
status
:
''
,
next_token
:
''
,
filter
:
`TriggeredBy contains "periodic-job"`
,
},
...
...
@@ -267,7 +263,6 @@ module('Acceptance | evaluations list', function (hooks) {
{
namespace
:
'
*
'
,
per_page
:
'
25
'
,
status
:
''
,
next_token
:
''
,
filter
:
'
NodeID is not empty
'
,
},
...
...
@@ -300,7 +295,6 @@ module('Acceptance | evaluations list', function (hooks) {
per_page
:
'
25
'
,
next_token
:
''
,
filter
:
`ID contains "
${
searchTerm
}
" or JobID contains "
${
searchTerm
}
" or NodeID contains "
${
searchTerm
}
" or TriggeredBy contains "
${
searchTerm
}
"`
,
status
:
''
,
},
'
It makes another server request using the options selected by the user
'
);
...
...
@@ -313,6 +307,81 @@ module('Acceptance | evaluations list', function (hooks) {
.
dom
(
'
[data-test-empty-evaluations-list]
'
)
.
exists
(
'
Renders a message saying no evaluations match filter status
'
);
});
test
(
'
it should enable combining filters and search
'
,
async
function
(
assert
)
{
assert
.
expect
(
5
);
server
.
get
(
'
/evaluations
'
,
getStandardRes
);
await
visit
(
'
/evaluations
'
);
const
searchTerm
=
'
Lasso
'
;
server
.
get
(
'
/evaluations
'
,
function
(
_server
,
fakeRequest
)
{
assert
.
deepEqual
(
fakeRequest
.
queryParams
,
{
namespace
:
'
*
'
,
per_page
:
'
25
'
,
next_token
:
''
,
filter
:
`ID contains "
${
searchTerm
}
" or JobID contains "
${
searchTerm
}
" or NodeID contains "
${
searchTerm
}
" or TriggeredBy contains "
${
searchTerm
}
"`
,
},
'
It makes another server request using the options selected by the user
'
);
return
[];
});
await
typeIn
(
'
[data-test-evaluations-search] input
'
,
searchTerm
);
server
.
get
(
'
/evaluations
'
,
function
(
_server
,
fakeRequest
)
{
assert
.
deepEqual
(
fakeRequest
.
queryParams
,
{
namespace
:
'
*
'
,
per_page
:
'
25
'
,
next_token
:
''
,
filter
:
`(ID contains "
${
searchTerm
}
" or JobID contains "
${
searchTerm
}
" or NodeID contains "
${
searchTerm
}
" or TriggeredBy contains "
${
searchTerm
}
") and NodeID is not empty`
,
},
'
It makes another server request using the options selected by the user
'
);
return
[];
});
await
clickTrigger
(
'
[data-test-evaluation-type-facet]
'
);
await
selectChoose
(
'
[data-test-evaluation-type-facet]
'
,
'
Client
'
);
server
.
get
(
'
/evaluations
'
,
function
(
_server
,
fakeRequest
)
{
assert
.
deepEqual
(
fakeRequest
.
queryParams
,
{
namespace
:
'
*
'
,
per_page
:
'
25
'
,
next_token
:
''
,
filter
:
`NodeID is not empty`
,
},
'
It makes another server request using the options selected by the user
'
);
return
[];
});
await
click
(
'
[data-test-evaluations-search] button
'
);
server
.
get
(
'
/evaluations
'
,
function
(
_server
,
fakeRequest
)
{
assert
.
deepEqual
(
fakeRequest
.
queryParams
,
{
namespace
:
'
*
'
,
per_page
:
'
25
'
,
next_token
:
''
,
filter
:
`NodeID is not empty and Status contains "complete"`
,
},
'
It makes another server request using the options selected by the user
'
);
return
[];
});
await
clickTrigger
(
'
[data-test-evaluation-status-facet]
'
);
await
selectChoose
(
'
[data-test-evaluation-status-facet]
'
,
'
Complete
'
);
assert
.
dom
(
'
[data-test-empty-evaluations-list]
'
)
.
exists
(
'
Renders a message saying no evaluations match filter status
'
);
});
});
module
(
'
page size
'
,
function
(
hooks
)
{
...
...
@@ -337,7 +406,6 @@ module('Acceptance | evaluations list', function (hooks) {
per_page
:
'
50
'
,
next_token
:
''
,
filter
:
''
,
status
:
''
,
},
'
It makes a request with the per_page set by the user
'
);
...
...
@@ -371,7 +439,6 @@ module('Acceptance | evaluations list', function (hooks) {
per_page
:
'
25
'
,
next_token
:
'
next-token-1
'
,
filter
:
''
,
status
:
''
,
},
'
It makes another server request using the options selected by the user
'
);
...
...
@@ -397,7 +464,6 @@ module('Acceptance | evaluations list', function (hooks) {
per_page
:
'
25
'
,
next_token
:
'
next-token-2
'
,
filter
:
''
,
status
:
''
,
},
'
It makes another server request using the options selected by the user
'
);
...
...
@@ -423,7 +489,6 @@ module('Acceptance | evaluations list', function (hooks) {
per_page
:
'
25
'
,
next_token
:
'
next-token-1
'
,
filter
:
''
,
status
:
''
,
},
'
It makes a request using the stored old token.
'
);
...
...
@@ -444,7 +509,6 @@ module('Acceptance | evaluations list', function (hooks) {
per_page
:
'
25
'
,
next_token
:
''
,
filter
:
''
,
status
:
''
,
},
'
When there are no more stored previous tokens, we will request with no next-token.
'
);
...
...
@@ -486,7 +550,6 @@ module('Acceptance | evaluations list', function (hooks) {
{
namespace
:
'
*
'
,
per_page
:
'
25
'
,
status
:
''
,
next_token
:
''
,
filter
:
''
,
},
...
...
@@ -534,9 +597,8 @@ module('Acceptance | evaluations list', function (hooks) {
{
namespace
:
'
*
'
,
per_page
:
'
25
'
,
status
:
'
pending
'
,
next_token
:
''
,
filter
:
''
,
filter
:
'
Status contains "pending"
'
,
},
'
It clears all next token when filtered request is made
'
);
...
...
This diff is collapsed.
Click to expand it.
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment