2019-06-06 16:47:10 +08:00
import selectKit from "helpers/select-kit-helper" ;
2018-04-10 15:59:24 +08:00
import { acceptance , waitFor } from "helpers/qunit-helpers" ;
2019-06-06 16:47:10 +08:00
2016-10-07 03:18:05 +08:00
acceptance ( "Search - Full Page" , {
2018-06-15 23:03:24 +08:00
settings : { tagging _enabled : true } ,
2017-08-08 16:08:07 +08:00
loggedIn : true ,
2018-07-26 18:16:32 +08:00
pretend ( server , helper ) {
server . get ( "/tags/filter/search" , ( ) => {
return helper . response ( { results : [ { text : "monkey" , count : 1 } ] } ) ;
2016-10-07 03:18:05 +08:00
} ) ;
2018-07-26 18:16:32 +08:00
server . get ( "/u/search/users" , ( ) => {
return helper . response ( {
2018-06-15 23:03:24 +08:00
users : [
{
username : "admin" ,
name : "admin" ,
avatar _template : "/images/avatar.png"
}
]
} ) ;
2016-10-07 03:18:05 +08:00
} ) ;
2018-07-26 18:16:32 +08:00
server . get ( "/admin/groups.json" , ( ) => {
return helper . response ( {
id : 2 ,
automatic : true ,
name : "moderators" ,
user _count : 4 ,
alias _level : 0 ,
visible : true ,
automatic _membership _email _domains : null ,
automatic _membership _retroactive : false ,
primary _group : false ,
title : null ,
grant _trust _level : null ,
incoming _email : null ,
notification _level : null ,
has _messages : true ,
is _member : true ,
mentionable : false ,
flair _url : null ,
flair _bg _color : null ,
flair _color : null
} ) ;
2016-10-07 03:18:05 +08:00
} ) ;
2018-07-26 18:16:32 +08:00
server . get ( "/badges.json" , ( ) => {
return helper . response ( {
2018-06-15 23:03:24 +08:00
badge _types : [ { id : 3 , name : "Bronze" , sort _order : 7 } ] ,
badge _groupings : [
{
id : 1 ,
name : "Getting Started" ,
description : null ,
position : 10 ,
system : true
}
] ,
badges : [
{
id : 17 ,
name : "Reader" ,
description :
"Read every reply in a topic with more than 100 replies" ,
grant _count : 0 ,
allow _title : false ,
multiple _grant : false ,
icon : "fa-certificate" ,
image : null ,
listable : true ,
enabled : true ,
badge _grouping _id : 1 ,
system : true ,
long _description :
"This badge is granted the first time you read a long topic with more than 100 replies. Reading a conversation closely helps you follow the discussion, understand different viewpoints, and leads to more interesting conversations. The more you read, the better the conversation gets. As we like to say, Reading is Fundamental! :slight_smile:\n" ,
slug : "reader" ,
has _badge : false ,
badge _type _id : 3
}
]
} ) ;
2016-10-07 03:18:05 +08:00
} ) ;
}
} ) ;
2015-07-15 23:16:49 +08:00
2018-07-26 18:16:32 +08:00
QUnit . test ( "perform various searches" , async assert => {
await visit ( "/search" ) ;
2016-08-10 00:16:29 +08:00
2018-07-26 18:16:32 +08:00
assert . ok ( $ ( "body.search-page" ) . length , "has body class" ) ;
assert . ok ( exists ( ".search-container" ) , "has container class" ) ;
assert . ok ( find ( ".search-query" ) . length > 0 ) ;
assert . ok ( find ( ".fps-topic" ) . length === 0 ) ;
2016-08-10 00:16:29 +08:00
2018-07-26 18:16:32 +08:00
await fillIn ( ".search-query" , "none" ) ;
await click ( ".search-cta" ) ;
2016-08-10 00:16:29 +08:00
2018-07-26 18:16:32 +08:00
assert . ok ( find ( ".fps-topic" ) . length === 0 , "has no results" ) ;
assert . ok ( find ( ".no-results-suggestion .google-search-form" ) ) ;
2016-08-10 00:16:29 +08:00
2018-07-26 18:16:32 +08:00
await fillIn ( ".search-query" , "posts" ) ;
await click ( ".search-cta" ) ;
2016-08-10 00:16:29 +08:00
2018-07-26 18:16:32 +08:00
assert . ok ( find ( ".fps-topic" ) . length === 1 , "has one post" ) ;
2016-08-10 00:16:29 +08:00
} ) ;
2016-10-07 03:18:05 +08:00
2018-07-26 18:16:32 +08:00
QUnit . test ( "escape search term" , async assert => {
await visit ( "/search" ) ;
await fillIn ( ".search-query" , "@<script>prompt(1337)</script>gmail.com" ) ;
assert . ok (
exists (
'.search-advanced-options span:contains("<script>prompt(1337)</script>gmail.com")'
) ,
"it escapes search term"
) ;
} ) ;
2016-12-13 04:22:26 +08:00
2019-04-17 00:35:54 +08:00
QUnit . skip ( "update username through advanced search ui" , async assert => {
2018-07-26 18:16:32 +08:00
await visit ( "/search" ) ;
await fillIn ( ".search-query" , "none" ) ;
await fillIn ( ".search-advanced-options .user-selector" , "admin" ) ;
await click ( ".search-advanced-options .user-selector" ) ;
await keyEvent ( ".search-advanced-options .user-selector" , "keydown" , 8 ) ;
waitFor ( assert , async ( ) => {
assert . ok (
visible ( ".search-advanced-options .autocomplete" ) ,
'"autocomplete" popup is visible'
) ;
2018-06-15 23:03:24 +08:00
assert . ok (
exists (
2018-07-26 18:16:32 +08:00
'.search-advanced-options .autocomplete ul li a span.username:contains("admin")'
2018-06-15 23:03:24 +08:00
) ,
2018-07-26 18:16:32 +08:00
'"autocomplete" popup has an entry for "admin"'
2018-06-15 23:03:24 +08:00
) ;
2016-12-13 04:22:26 +08:00
2018-07-26 18:16:32 +08:00
await click ( ".search-advanced-options .autocomplete ul li a:first" ) ;
assert . ok (
exists ( '.search-advanced-options span:contains("admin")' ) ,
'has "admin" pre-populated'
) ;
assert . equal (
find ( ".search-query" ) . val ( ) ,
"none @admin" ,
'has updated search term to "none user:admin"'
) ;
2016-10-07 03:18:05 +08:00
} ) ;
} ) ;
2018-07-26 18:16:32 +08:00
QUnit . test ( "update category through advanced search ui" , async assert => {
2018-06-15 23:03:24 +08:00
const categoryChooser = selectKit (
".search-advanced-options .category-chooser"
) ;
2017-12-22 20:08:12 +08:00
2018-07-26 18:16:32 +08:00
await visit ( "/search" ) ;
2017-12-22 20:08:12 +08:00
2018-07-26 18:16:32 +08:00
await fillIn ( ".search-query" , "none" ) ;
2016-10-07 03:18:05 +08:00
2018-07-30 04:51:32 +08:00
await categoryChooser . expand ( ) ;
2018-07-26 18:16:32 +08:00
await categoryChooser . fillInFilter ( "faq" ) ;
2018-07-30 04:51:32 +08:00
await categoryChooser . selectRowByValue ( 4 ) ;
2018-07-26 18:16:32 +08:00
assert . ok (
exists ( '.search-advanced-options .badge-category:contains("faq")' ) ,
'has "faq" populated'
) ;
assert . equal (
find ( ".search-query" ) . val ( ) ,
"none #faq" ,
'has updated search term to "none #faq"'
) ;
2016-10-07 03:18:05 +08:00
} ) ;
2016-10-12 05:50:16 +08:00
// test("update group through advanced search ui", assert => {
// visit("/search");
2018-04-10 15:59:24 +08:00
// fillIn('.search-query', 'none');
//
2016-10-13 15:03:58 +08:00
// fillIn('.search-advanced-options .group-selector', 'moderators');
// click('.search-advanced-options .group-selector');
// keyEvent('.search-advanced-options .group-selector', 'keydown', 8);
2016-10-12 05:50:16 +08:00
//
// andThen(() => {
// waitFor(() => {
2016-10-13 15:03:58 +08:00
// assert.ok(visible('.search-advanced-options .autocomplete'), '"autocomplete" popup is visible');
// assert.ok(exists('.search-advanced-options .autocomplete ul li a:contains("moderators")'), '"autocomplete" popup has an entry for "moderators"');
2016-10-12 05:50:16 +08:00
//
2016-10-13 15:03:58 +08:00
// click('.search-advanced-options .autocomplete ul li a:first');
2016-10-12 05:50:16 +08:00
//
// andThen(() => {
2016-10-13 15:03:58 +08:00
// assert.ok(exists('.search-advanced-options span:contains("moderators")'), 'has "moderators" pre-populated');
2018-04-10 15:59:24 +08:00
// assert.equal(find('.search-query').val(), "none group:moderators", 'has updated search term to "none group:moderators"');
2016-10-12 05:50:16 +08:00
// });
// });
// });
// });
// test("update badges through advanced search ui", assert => {
// visit("/search");
2018-04-10 15:59:24 +08:00
// fillIn('.search-query', 'none');
//
2016-10-13 15:03:58 +08:00
// fillIn('.search-advanced-options .badge-names', 'Reader');
// click('.search-advanced-options .badge-names');
// keyEvent('.search-advanced-options .badge-names', 'keydown', 8);
2016-10-12 05:50:16 +08:00
//
// andThen(() => {
// waitFor(() => {
2016-10-13 15:03:58 +08:00
// assert.ok(visible('.search-advanced-options .autocomplete'), '"autocomplete" popup is visible');
// assert.ok(exists('.search-advanced-options .autocomplete ul li a:contains("Reader")'), '"autocomplete" popup has an entry for "Reader"');
2016-10-12 05:50:16 +08:00
//
2016-10-13 15:03:58 +08:00
// click('.search-advanced-options .autocomplete ul li a:first');
2016-10-12 05:50:16 +08:00
//
// andThen(() => {
2016-10-13 15:03:58 +08:00
// assert.ok(exists('.search-advanced-options span:contains("Reader")'), 'has "Reader" pre-populated');
2018-04-10 15:59:24 +08:00
// assert.equal(find('.search-query').val(), "none badge:Reader", 'has updated search term to "none badge:Reader"');
2016-10-12 05:50:16 +08:00
// });
// });
// });
// });
2016-10-07 03:18:05 +08:00
// test("update tags through advanced search ui", assert => {
// visit("/search");
2018-04-10 15:59:24 +08:00
// fillIn('.search-query', 'none');
//
2016-10-07 03:18:05 +08:00
//
2016-10-13 15:03:58 +08:00
// keyEvent('.search-advanced-options .tag-chooser input.select2-input', 'keydown', 110);
// fillIn('.search-advanced-options .tag-chooser input.select2-input', 'monkey');
// keyEvent('.search-advanced-options .tag-chooser input.select2-input', 'keyup', 110);
2016-10-07 03:18:05 +08:00
//
// andThen(() => {
// waitFor(() => {
// click('li.select2-result-selectable:first');
// andThen(() => {
2016-10-13 15:03:58 +08:00
// assert.ok(exists('.search-advanced-options .tag-chooser .tag-monkey'), 'has "monkey" pre-populated');
2018-04-10 15:59:24 +08:00
// assert.equal(find('.search-query').val(), "none tags:monkey", 'has updated search term to "none tags:monkey"');
2016-10-07 03:18:05 +08:00
// });
// });
// });
// });
2018-05-24 11:02:20 +08:00
//
2018-06-15 23:03:24 +08:00
QUnit . test (
"update in:title filter through advanced search ui" ,
async assert => {
await visit ( "/search" ) ;
await fillIn ( ".search-query" , "none" ) ;
await click ( ".search-advanced-options .in-title" ) ;
assert . ok (
exists ( ".search-advanced-options .in-title:checked" ) ,
'has "in title" populated'
) ;
assert . equal (
find ( ".search-query" ) . val ( ) ,
"none in:title" ,
'has updated search term to "none in:title"'
) ;
}
) ;
QUnit . test (
"update in:likes filter through advanced search ui" ,
async assert => {
await visit ( "/search" ) ;
await fillIn ( ".search-query" , "none" ) ;
await click ( ".search-advanced-options .in-likes" ) ;
assert . ok (
exists ( ".search-advanced-options .in-likes:checked" ) ,
'has "I liked" populated'
) ;
assert . equal (
find ( ".search-query" ) . val ( ) ,
"none in:likes" ,
'has updated search term to "none in:likes"'
) ;
}
) ;
2016-10-07 03:18:05 +08:00
2018-07-26 18:16:32 +08:00
QUnit . test (
2019-07-22 22:55:49 +08:00
"update in:personal filter through advanced search ui" ,
2018-07-26 18:16:32 +08:00
async assert => {
await visit ( "/search" ) ;
await fillIn ( ".search-query" , "none" ) ;
await click ( ".search-advanced-options .in-private" ) ;
2016-10-14 00:34:31 +08:00
2018-06-15 23:03:24 +08:00
assert . ok (
exists ( ".search-advanced-options .in-private:checked" ) ,
'has "are in my messages" populated'
) ;
assert . equal (
find ( ".search-query" ) . val ( ) ,
2019-07-22 22:55:49 +08:00
"none in:personal" ,
'has updated search term to "none in:personal"'
2018-06-15 23:03:24 +08:00
) ;
2018-07-26 18:16:32 +08:00
}
) ;
2016-10-14 00:34:31 +08:00
2018-07-26 18:16:32 +08:00
QUnit . test ( "update in:seen filter through advanced search ui" , async assert => {
await visit ( "/search" ) ;
await fillIn ( ".search-query" , "none" ) ;
await click ( ".search-advanced-options .in-seen" ) ;
2016-10-14 00:34:31 +08:00
2018-07-26 18:16:32 +08:00
assert . ok (
exists ( ".search-advanced-options .in-seen:checked" ) ,
"it should check the right checkbox"
) ;
2017-03-09 10:45:43 +08:00
2018-07-26 18:16:32 +08:00
assert . equal (
find ( ".search-query" ) . val ( ) ,
"none in:seen" ,
"it should update the search term"
) ;
2016-10-14 00:34:31 +08:00
} ) ;
2018-07-26 18:16:32 +08:00
QUnit . test ( "update in filter through advanced search ui" , async assert => {
2018-06-15 23:03:24 +08:00
const inSelector = selectKit ( ".search-advanced-options .select-kit#in" ) ;
2017-12-22 20:08:12 +08:00
2018-07-26 18:16:32 +08:00
await visit ( "/search" ) ;
2017-12-22 20:08:12 +08:00
2018-07-26 18:16:32 +08:00
await fillIn ( ".search-query" , "none" ) ;
2018-07-30 04:51:32 +08:00
await inSelector . expand ( ) ;
await inSelector . selectRowByValue ( "bookmarks" ) ;
2016-10-14 00:34:31 +08:00
2020-02-03 21:22:14 +08:00
assert . equal (
inSelector . header ( ) . label ( ) ,
"I bookmarked" ,
2018-07-26 18:16:32 +08:00
'has "I bookmarked" populated'
) ;
assert . equal (
find ( ".search-query" ) . val ( ) ,
"none in:bookmarks" ,
'has updated search term to "none in:bookmarks"'
) ;
2016-10-14 00:34:31 +08:00
} ) ;
2018-07-26 18:16:32 +08:00
QUnit . test ( "update status through advanced search ui" , async assert => {
2018-06-15 23:03:24 +08:00
const statusSelector = selectKit (
".search-advanced-options .select-kit#status"
) ;
2017-12-22 20:08:12 +08:00
2018-07-26 18:16:32 +08:00
await visit ( "/search" ) ;
2017-12-22 20:08:12 +08:00
2018-07-26 18:16:32 +08:00
await fillIn ( ".search-query" , "none" ) ;
2018-07-30 04:51:32 +08:00
await statusSelector . expand ( ) ;
await statusSelector . selectRowByValue ( "closed" ) ;
2016-10-07 03:18:05 +08:00
2020-02-03 21:22:14 +08:00
assert . equal (
statusSelector . header ( ) . label ( ) ,
"are closed" ,
2018-07-26 18:16:32 +08:00
'has "are closed" populated'
) ;
assert . equal (
find ( ".search-query" ) . val ( ) ,
"none status:closed" ,
'has updated search term to "none status:closed"'
) ;
2016-10-07 03:18:05 +08:00
} ) ;
2018-07-26 18:16:32 +08:00
QUnit . test ( "update post time through advanced search ui" , async assert => {
2018-08-23 14:05:12 +08:00
await visit ( "/search?expanded=true&q=after:2018-08-22" ) ;
assert . equal (
find ( ".search-query" ) . val ( ) ,
"after:2018-08-22" ,
"it should update the search term correctly"
) ;
2018-07-26 18:16:32 +08:00
await visit ( "/search" ) ;
2017-12-22 20:08:12 +08:00
2018-07-26 18:16:32 +08:00
await fillIn ( ".search-query" , "none" ) ;
2020-02-04 23:59:56 +08:00
await fillIn ( "#search-post-date .date-picker" , "October 5, 2016" ) ;
const postTimeSelector = selectKit (
".search-advanced-options .select-kit#postTime"
) ;
2018-07-30 04:51:32 +08:00
await postTimeSelector . expand ( ) ;
await postTimeSelector . selectRowByValue ( "after" ) ;
2016-10-07 03:18:05 +08:00
2020-02-03 21:22:14 +08:00
assert . equal (
postTimeSelector . header ( ) . label ( ) ,
"after" ,
2018-07-26 18:16:32 +08:00
'has "after" populated'
) ;
2018-08-23 14:05:12 +08:00
2018-07-26 18:16:32 +08:00
assert . equal (
find ( ".search-query" ) . val ( ) ,
"none after:2016-10-05" ,
'has updated search term to "none after:2016-10-05"'
) ;
2016-10-07 03:18:05 +08:00
} ) ;
2018-07-26 18:16:32 +08:00
QUnit . test ( "update min post count through advanced search ui" , async assert => {
await visit ( "/search" ) ;
await fillIn ( ".search-query" , "none" ) ;
await fillIn ( "#search-min-post-count" , "5" ) ;
2016-10-07 03:18:05 +08:00
2018-07-26 18:16:32 +08:00
assert . equal (
find ( ".search-advanced-options #search-min-post-count" ) . val ( ) ,
"5" ,
'has "5" populated'
) ;
assert . equal (
find ( ".search-query" ) . val ( ) ,
"none min_post_count:5" ,
'has updated search term to "none min_post_count:5"'
) ;
2016-10-07 03:18:05 +08:00
} ) ;
2016-10-17 12:02:58 +08:00
2018-07-26 18:16:32 +08:00
QUnit . test ( "validate advanced search when initially empty" , async assert => {
await visit ( "/search?expanded=true" ) ;
await click ( ".search-advanced-options .in-likes" ) ;
2016-10-17 12:02:58 +08:00
2018-07-26 18:16:32 +08:00
assert . ok (
2020-02-03 21:22:14 +08:00
selectKit ( ".search-advanced-options .in-likes:checked" ) ,
2018-07-26 18:16:32 +08:00
'has "I liked" populated'
) ;
assert . equal (
find ( ".search-query" ) . val ( ) ,
"in:likes" ,
'has updated search term to "in:likes"'
) ;
2016-10-17 12:02:58 +08:00
} ) ;