mirror of
https://github.com/discourse/discourse.git
synced 2025-05-22 22:43:33 +08:00
Add tests to flagged topics
This commit is contained in:
@ -2,18 +2,20 @@ import ModalFunctionality from 'discourse/mixins/modal-functionality';
|
|||||||
|
|
||||||
export default Ember.Controller.extend(ModalFunctionality, {
|
export default Ember.Controller.extend(ModalFunctionality, {
|
||||||
removeAfter: null,
|
removeAfter: null,
|
||||||
|
deleteSpammer: null,
|
||||||
|
|
||||||
_agreeFlag(action) {
|
actions: {
|
||||||
|
agreeDeleteSpammer(user) {
|
||||||
|
return this.removeAfter(user.deleteAsSpammer()).then(() => {
|
||||||
|
this.send('closeModal');
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
perform(action) {
|
||||||
let flaggedPost = this.get('model');
|
let flaggedPost = this.get('model');
|
||||||
return this.removeAfter(flaggedPost.agreeFlags(action)).then(() => {
|
return this.removeAfter(flaggedPost.agreeFlags(action)).then(() => {
|
||||||
this.send('closeModal');
|
this.send('closeModal');
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
actions: {
|
|
||||||
agreeFlagHidePost() { return this._agreeFlag("hide"); },
|
|
||||||
agreeFlagKeepPost() { return this._agreeFlag("keep"); },
|
|
||||||
agreeFlagRestorePost() { return this._agreeFlag("restore"); }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
|
@ -4,6 +4,12 @@ export default Ember.Controller.extend(ModalFunctionality, {
|
|||||||
removeAfter: null,
|
removeAfter: null,
|
||||||
|
|
||||||
actions: {
|
actions: {
|
||||||
|
deleteSpammer(user) {
|
||||||
|
return this.removeAfter(user.deleteAsSpammer()).then(() => {
|
||||||
|
this.send('closeModal');
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
deletePostDeferFlag() {
|
deletePostDeferFlag() {
|
||||||
let flaggedPost = this.get('model');
|
let flaggedPost = this.get('model');
|
||||||
this.removeAfter(flaggedPost.deferFlags(true)).then(() => {
|
this.removeAfter(flaggedPost.deferFlags(true)).then(() => {
|
||||||
|
@ -463,27 +463,30 @@ const AdminUser = Discourse.User.extend({
|
|||||||
bootbox.dialog(message, buttons, { "classes": "delete-user-modal" });
|
bootbox.dialog(message, buttons, { "classes": "delete-user-modal" });
|
||||||
},
|
},
|
||||||
|
|
||||||
deleteAsSpammer(successCallback) {
|
deleteAsSpammer() {
|
||||||
const user = this;
|
return this.checkEmail().then(() => {
|
||||||
|
|
||||||
user.checkEmail().then(function() {
|
let message = I18n.messageFormat('flagging.delete_confirm_MF', {
|
||||||
const data = {
|
"POSTS": this.get('post_count'),
|
||||||
"POSTS": user.get('post_count'),
|
"TOPICS": this.get('topic_count'),
|
||||||
"TOPICS": user.get('topic_count'),
|
email: this.get('email') || I18n.t("flagging.hidden_email_address"),
|
||||||
email: user.get('email') || I18n.t("flagging.hidden_email_address"),
|
ip_address: this.get('ip_address') || I18n.t("flagging.ip_address_missing")
|
||||||
ip_address: user.get('ip_address') || I18n.t("flagging.ip_address_missing")
|
});
|
||||||
};
|
|
||||||
|
|
||||||
const message = I18n.messageFormat('flagging.delete_confirm_MF', data),
|
let userId = this.get('id');
|
||||||
buttons = [{
|
|
||||||
"label": I18n.t("composer.cancel"),
|
return new Ember.RSVP.Promise((resolve, reject) => {
|
||||||
"class": "cancel-inline",
|
const buttons = [
|
||||||
"link": true
|
{
|
||||||
}, {
|
label: I18n.t("composer.cancel"),
|
||||||
"label": `${iconHTML('exclamation-triangle')} ` + I18n.t("flagging.yes_delete_spammer"),
|
class: "cancel-inline",
|
||||||
"class": "btn btn-danger",
|
link: true
|
||||||
"callback": function() {
|
},
|
||||||
return ajax("/admin/users/" + user.get('id') + '.json', {
|
{
|
||||||
|
label: `${iconHTML('exclamation-triangle')} ` + I18n.t("flagging.yes_delete_spammer"),
|
||||||
|
class: "btn btn-danger confirm-delete",
|
||||||
|
callback() {
|
||||||
|
return ajax(`/admin/users/${userId}.json`, {
|
||||||
type: 'DELETE',
|
type: 'DELETE',
|
||||||
data: {
|
data: {
|
||||||
delete_posts: true,
|
delete_posts: true,
|
||||||
@ -493,19 +496,23 @@ const AdminUser = Discourse.User.extend({
|
|||||||
delete_as_spammer: true,
|
delete_as_spammer: true,
|
||||||
context: window.location.pathname
|
context: window.location.pathname
|
||||||
}
|
}
|
||||||
}).then(function(result) {
|
}).then(result => {
|
||||||
if (result.deleted) {
|
if (result.deleted) {
|
||||||
if (successCallback) successCallback();
|
resolve();
|
||||||
} else {
|
} else {
|
||||||
bootbox.alert(I18n.t("admin.user.delete_failed"));
|
throw 'failed to delete';
|
||||||
}
|
}
|
||||||
}).catch(function() {
|
}).catch(() => {
|
||||||
bootbox.alert(I18n.t("admin.user.delete_failed"));
|
bootbox.alert(I18n.t("admin.user.delete_failed"));
|
||||||
|
reject();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}];
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
bootbox.dialog(message, buttons, {classes: "flagging-delete-spammer"});
|
||||||
|
});
|
||||||
|
|
||||||
bootbox.dialog(message, buttons, {"classes": "flagging-delete-spammer"});
|
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -92,7 +92,7 @@ const FlaggedPost = Post.extend({
|
|||||||
|
|
||||||
@computed('post_actions.@each.name_key')
|
@computed('post_actions.@each.name_key')
|
||||||
flaggedForSpam() {
|
flaggedForSpam() {
|
||||||
return !_.every(this.get('post_actions'), function(action) { return action.name_key !== 'spam'; });
|
return this.get('post_actions').every(action => action.name_key === 'spam');
|
||||||
},
|
},
|
||||||
|
|
||||||
@computed('post_actions.@each.targets_topic')
|
@computed('post_actions.@each.targets_topic')
|
||||||
@ -105,9 +105,11 @@ const FlaggedPost = Post.extend({
|
|||||||
return _.any(this.get('post_actions'), function(action) { return !action.targets_topic; });
|
return _.any(this.get('post_actions'), function(action) { return !action.targets_topic; });
|
||||||
},
|
},
|
||||||
|
|
||||||
@computed('flaggedForSpan')
|
@computed('flaggedForSpam')
|
||||||
canDeleteAsSpammer(flaggedForSpam) {
|
canDeleteAsSpammer(flaggedForSpam) {
|
||||||
return Discourse.User.currentProp('staff') && flaggedForSpam && this.get('user.can_delete_all_posts') && this.get('user.can_be_deleted');
|
return flaggedForSpam &&
|
||||||
|
this.get('user.can_delete_all_posts') &&
|
||||||
|
this.get('user.can_be_deleted');
|
||||||
},
|
},
|
||||||
|
|
||||||
deletePost() {
|
deletePost() {
|
||||||
|
@ -47,7 +47,7 @@
|
|||||||
{{#each flaggedPost.flaggers as |flagger|}}
|
{{#each flaggedPost.flaggers as |flagger|}}
|
||||||
<tr>
|
<tr>
|
||||||
<td class='avatar'>
|
<td class='avatar'>
|
||||||
{{#link-to 'adminUser' flagger.user}}
|
{{#link-to 'adminUser' flagger.user class='flagger'}}
|
||||||
{{avatar flagger.user imageSize="medium"}}
|
{{avatar flagger.user imageSize="medium"}}
|
||||||
{{/link-to}}
|
{{/link-to}}
|
||||||
</td>
|
</td>
|
||||||
@ -135,6 +135,7 @@
|
|||||||
<td colspan="3" class="action">
|
<td colspan="3" class="action">
|
||||||
{{d-button
|
{{d-button
|
||||||
title="admin.flags.agree_title"
|
title="admin.flags.agree_title"
|
||||||
|
class="agree-flag"
|
||||||
label="admin.flags.agree"
|
label="admin.flags.agree"
|
||||||
icon="thumbs-o-up"
|
icon="thumbs-o-up"
|
||||||
action="showAgreeFlagModal"
|
action="showAgreeFlagModal"
|
||||||
@ -143,25 +144,28 @@
|
|||||||
{{#if flaggedPost.postHidden}}
|
{{#if flaggedPost.postHidden}}
|
||||||
{{d-button
|
{{d-button
|
||||||
title="admin.flags.disagree_flag_unhide_post_title"
|
title="admin.flags.disagree_flag_unhide_post_title"
|
||||||
|
class="disagree-flag"
|
||||||
action="disagree"
|
action="disagree"
|
||||||
icon="thumbs-o-down"
|
icon="thumbs-o-down"
|
||||||
label="admin.flags.disagree_flag_unhide_post"}}
|
label="admin.flags.disagree_flag_unhide_post"}}
|
||||||
{{else}}
|
{{else}}
|
||||||
{{d-button
|
{{d-button
|
||||||
title="admin.flags.disagree_flag_title"
|
title="admin.flags.disagree_flag_title"
|
||||||
|
class="disagree-flag"
|
||||||
action="disagree"
|
action="disagree"
|
||||||
icon="thumbs-o-down"
|
icon="thumbs-o-down"
|
||||||
label="admin.flags.disagree_flag"}}
|
label="admin.flags.disagree_flag"}}
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
|
||||||
{{d-button
|
{{d-button
|
||||||
|
class="defer-flag"
|
||||||
title="admin.flags.defer_flag_title"
|
title="admin.flags.defer_flag_title"
|
||||||
action="defer"
|
action="defer"
|
||||||
icon="external-link"
|
icon="external-link"
|
||||||
label="admin.flags.defer_flag"}}
|
label="admin.flags.defer_flag"}}
|
||||||
|
|
||||||
{{d-button
|
{{d-button
|
||||||
class="btn-danger"
|
class="btn-danger delete-flag"
|
||||||
title="admin.flags.delete_title"
|
title="admin.flags.delete_title"
|
||||||
action="showDeleteFlagModal"
|
action="showDeleteFlagModal"
|
||||||
icon="trash-o"
|
icon="trash-o"
|
||||||
|
@ -17,7 +17,6 @@
|
|||||||
removePost=(action "removePost" flaggedPost)
|
removePost=(action "removePost" flaggedPost)
|
||||||
hideTitle=topic}}
|
hideTitle=topic}}
|
||||||
{{/each}}
|
{{/each}}
|
||||||
|
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
{{/load-more}}
|
{{/load-more}}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
{{#each users as |u|}}
|
{{#each users as |u|}}
|
||||||
{{#link-to 'adminUser' u}}
|
{{#link-to 'adminUser' u class="flagged-topic-user"}}
|
||||||
{{avatar u imageSize="small"}}
|
{{avatar u imageSize="small"}}
|
||||||
{{/link-to}}
|
{{/link-to}}
|
||||||
{{/each}}
|
{{/each}}
|
||||||
|
@ -22,7 +22,7 @@
|
|||||||
{{flag-counts details=fc}}
|
{{flag-counts details=fc}}
|
||||||
{{/each}}
|
{{/each}}
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td class='flagged-topic-users'>
|
||||||
{{flagged-topic-users users=ft.users tagName=""}}
|
{{flagged-topic-users users=ft.users tagName=""}}
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
@ -32,7 +32,7 @@
|
|||||||
{{#link-to
|
{{#link-to
|
||||||
"adminFlags.topics.show"
|
"adminFlags.topics.show"
|
||||||
ft.id
|
ft.id
|
||||||
class="btn d-button no-text btn-small btn-primary"
|
class="btn d-button no-text btn-small btn-primary show-details"
|
||||||
title=(i18n "admin.flags.show_details")}}
|
title=(i18n "admin.flags.show_details")}}
|
||||||
{{d-icon "search"}}
|
{{d-icon "search"}}
|
||||||
{{/link-to}}
|
{{/link-to}}
|
||||||
|
@ -11,5 +11,8 @@
|
|||||||
{{plugin-outlet name="flagged-topic-details-header" args=(hash topic=topic)}}
|
{{plugin-outlet name="flagged-topic-details-header" args=(hash topic=topic)}}
|
||||||
</div>
|
</div>
|
||||||
<div class='topic-flags'>
|
<div class='topic-flags'>
|
||||||
{{flagged-posts flaggedPosts=flaggedPosts query="active" topic=topic}}
|
{{flagged-posts
|
||||||
|
flaggedPosts=flaggedPosts
|
||||||
|
filter="active"
|
||||||
|
topic=topic}}
|
||||||
</div>
|
</div>
|
||||||
|
@ -1,13 +1,35 @@
|
|||||||
{{#d-modal-body title="admin.flags.agree_flag_modal_title"}}
|
{{#d-modal-body title="admin.flags.agree_flag_modal_title"}}
|
||||||
{{#if model.user_deleted}}
|
{{#if model.user_deleted}}
|
||||||
<button title={{i18n 'admin.flags.agree_flag_restore_post_title'}} {{action "agreeFlagRestorePost"}} class="btn">{{d-icon "thumbs-o-up"}}{{d-icon "eye"}}{{i18n 'admin.flags.agree_flag_restore_post'}}</button>
|
{{d-button
|
||||||
|
title="admin.flags.agree_flag_restore_post_title"
|
||||||
|
class="confirm-agree-restore"
|
||||||
|
action=(action "perform" "restore")
|
||||||
|
icon="eye"
|
||||||
|
label="admin.flags.agree_flag_restore_post"}}
|
||||||
{{else}}
|
{{else}}
|
||||||
{{#unless model.postHidden}}
|
{{#unless model.postHidden}}
|
||||||
<button title="{{i18n 'admin.flags.agree_flag_hide_post_title'}}" {{action "agreeFlagHidePost"}} class="btn">{{d-icon "thumbs-o-up"}}{{d-icon "eye-slash"}}{{i18n 'admin.flags.agree_flag_hide_post'}}</button>
|
{{d-button
|
||||||
|
title="admin.flags.agree_flag_hide_post_title"
|
||||||
|
action=(action "perform" "hide")
|
||||||
|
class="confirm-agree-hide"
|
||||||
|
icon="eye-slash"
|
||||||
|
label="admin.flags.agree_flag_hide_post"}}
|
||||||
{{/unless}}
|
{{/unless}}
|
||||||
{{/if}}
|
{{/if}}
|
||||||
<button title="{{i18n 'admin.flags.agree_flag_title'}}" {{action "agreeFlagKeepPost"}} class="btn">{{d-icon "thumbs-o-up"}}{{i18n 'admin.flags.agree_flag'}}</button>
|
|
||||||
|
{{d-button
|
||||||
|
title="admin.flags.agree_flag_title"
|
||||||
|
action=(action "perform" "keep")
|
||||||
|
class="confirm-agree-keep"
|
||||||
|
icon="thumbs-o-up"
|
||||||
|
label="admin.flags.agree_flag"}}
|
||||||
|
|
||||||
{{#if model.canDeleteAsSpammer}}
|
{{#if model.canDeleteAsSpammer}}
|
||||||
<button title="{{i18n 'admin.flags.delete_spammer_title'}}" {{action "deleteSpammer" model.user}} class="btn btn-danger">{{d-icon "exclamation-triangle"}}{{i18n 'admin.flags.delete_spammer'}}</button>
|
{{d-button
|
||||||
|
title="admin.flags.delete_spammer_title"
|
||||||
|
action=(action "agreeDeleteSpammer" model.user)
|
||||||
|
class="btn-danger delete-spammer"
|
||||||
|
icon="exclamation-triangle"
|
||||||
|
label="admin.flags.delete_spammer"}}
|
||||||
{{/if}}
|
{{/if}}
|
||||||
{{/d-modal-body}}
|
{{/d-modal-body}}
|
||||||
|
@ -1,7 +1,24 @@
|
|||||||
{{#d-modal-body title="admin.flags.delete_flag_modal_title"}}
|
{{#d-modal-body title="admin.flags.delete_flag_modal_title"}}
|
||||||
<button title="{{i18n 'admin.flags.delete_post_defer_flag_title'}}" {{action "deletePostDeferFlag"}} class="btn">{{d-icon "trash-o"}}{{d-icon "external-link"}}{{i18n 'admin.flags.delete_post_defer_flag'}}</button>
|
{{d-button
|
||||||
<button title="{{i18n 'admin.flags.delete_post_agree_flag_title'}}" {{action "deletePostAgreeFlag"}} class="btn">{{d-icon "trash-o"}}{{d-icon "thumbs-o-up"}}{{i18n 'admin.flags.delete_post_agree_flag'}}</button>
|
class="delete-defer"
|
||||||
|
title="admin.flags.delete_post_defer_flag_title"
|
||||||
|
action="deletePostDeferFlag"
|
||||||
|
icon="external-link"
|
||||||
|
label="admin.flags.delete_post_defer_flag"}}
|
||||||
|
|
||||||
|
{{d-button
|
||||||
|
class="delete-agree"
|
||||||
|
title="admin.flags.delete_post_agree_flag_title"
|
||||||
|
action="deletePostAgreeFlag"
|
||||||
|
icon="thumbs-o-up"
|
||||||
|
label="admin.flags.delete_post_agree_flag"}}
|
||||||
|
|
||||||
{{#if model.canDeleteAsSpammer}}
|
{{#if model.canDeleteAsSpammer}}
|
||||||
<button title="{{i18n 'admin.flags.delete_spammer_title'}}" {{action "deleteSpammer" model.user}} class="btn btn-danger">{{d-icon "exclamation-triangle"}}{{i18n 'admin.flags.delete_spammer'}}</button>
|
{{d-button
|
||||||
|
class="btn-danger delete-spammer"
|
||||||
|
title="admin.flags.delete_spammer_title"
|
||||||
|
action=(action "deleteSpammer" model.user)
|
||||||
|
icon="exclamation-triangle"
|
||||||
|
label="admin.flags.delete_spammer"}}
|
||||||
{{/if}}
|
{{/if}}
|
||||||
{{/d-modal-body}}
|
{{/d-modal-body}}
|
||||||
|
@ -139,8 +139,7 @@ const ApplicationRoute = Discourse.Route.extend(OpenComposer, {
|
|||||||
},
|
},
|
||||||
|
|
||||||
deleteSpammer(user) {
|
deleteSpammer(user) {
|
||||||
this.send('closeModal');
|
user.deleteAsSpammer.then(() => window.location.reload());
|
||||||
user.deleteAsSpammer(function() { window.location.reload(); });
|
|
||||||
},
|
},
|
||||||
|
|
||||||
checkEmail(user) {
|
checkEmail(user) {
|
||||||
|
@ -26,6 +26,8 @@ Object.keys(aliases).forEach(name => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
export function performEmojiUnescape(string, opts) {
|
export function performEmojiUnescape(string, opts) {
|
||||||
|
if (!string) { return; }
|
||||||
|
|
||||||
// this can be further improved by supporting matches of emoticons that don't begin with a colon
|
// this can be further improved by supporting matches of emoticons that don't begin with a colon
|
||||||
if (string.indexOf(":") >= 0) {
|
if (string.indexOf(":") >= 0) {
|
||||||
return string.replace(/\B:[^\s:]+(?::t\d)?:?\B/g, m => {
|
return string.replace(/\B:[^\s:]+(?::t\d)?:?\B/g, m => {
|
||||||
|
121
test/javascripts/acceptance/admin-flags-test.js.es6
Normal file
121
test/javascripts/acceptance/admin-flags-test.js.es6
Normal file
@ -0,0 +1,121 @@
|
|||||||
|
import { acceptance } from "helpers/qunit-helpers";
|
||||||
|
acceptance("Admin - Flagging", { loggedIn: true });
|
||||||
|
|
||||||
|
QUnit.test("flagged posts", assert => {
|
||||||
|
visit("/admin/flags/active");
|
||||||
|
andThen(() => {
|
||||||
|
assert.equal(find('.admin-flags .flagged-post').length, 1);
|
||||||
|
assert.equal(find('.flagged-post .flaggers .flagger').length, 1, 'shows who flagged it');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
QUnit.test("flagged posts - agree", assert => {
|
||||||
|
visit("/admin/flags/active");
|
||||||
|
click('.agree-flag');
|
||||||
|
andThen(() => {
|
||||||
|
assert.equal(find('.agree-flag-modal:visible').length, 1);
|
||||||
|
});
|
||||||
|
click('.confirm-agree-keep');
|
||||||
|
andThen(() => {
|
||||||
|
assert.equal(find('.agree-flag-modal:visible').length, 0, 'modal is closed');
|
||||||
|
assert.equal(find('.admin-flags .flagged-post').length, 0, 'post was removed');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
QUnit.test("flagged posts - agree + hide", assert => {
|
||||||
|
visit("/admin/flags/active");
|
||||||
|
click('.agree-flag');
|
||||||
|
andThen(() => {
|
||||||
|
assert.equal(find('.agree-flag-modal:visible').length, 1);
|
||||||
|
});
|
||||||
|
click('.confirm-agree-hide');
|
||||||
|
andThen(() => {
|
||||||
|
assert.equal(find('.agree-flag-modal:visible').length, 0, 'modal is closed');
|
||||||
|
assert.equal(find('.admin-flags .flagged-post').length, 0, 'post was removed');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
QUnit.test("flagged posts - agree + deleteSpammer", assert => {
|
||||||
|
visit("/admin/flags/active");
|
||||||
|
click('.agree-flag');
|
||||||
|
andThen(() => {
|
||||||
|
assert.equal(find('.agree-flag-modal:visible').length, 1);
|
||||||
|
});
|
||||||
|
click('.delete-spammer');
|
||||||
|
click('.confirm-delete');
|
||||||
|
andThen(() => {
|
||||||
|
assert.equal(find('.agree-flag-modal:visible').length, 0, 'modal is closed');
|
||||||
|
assert.equal(find('.admin-flags .flagged-post').length, 0, 'post was removed');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
QUnit.test("flagged posts - disagree", assert => {
|
||||||
|
visit("/admin/flags/active");
|
||||||
|
click('.disagree-flag');
|
||||||
|
andThen(() => {
|
||||||
|
assert.equal(find('.admin-flags .flagged-post').length, 0);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
QUnit.test("flagged posts - defer", assert => {
|
||||||
|
visit("/admin/flags/active");
|
||||||
|
click('.defer-flag');
|
||||||
|
andThen(() => {
|
||||||
|
assert.equal(find('.admin-flags .flagged-post').length, 0);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
QUnit.test("flagged posts - delete + defer", assert => {
|
||||||
|
visit("/admin/flags/active");
|
||||||
|
click('.delete-flag');
|
||||||
|
andThen(() => {
|
||||||
|
assert.equal(find('.delete-flag-modal:visible').length, 1);
|
||||||
|
});
|
||||||
|
click('.delete-defer');
|
||||||
|
andThen(() => {
|
||||||
|
assert.equal(find('.delete-flag-modal:visible').length, 0);
|
||||||
|
assert.equal(find('.admin-flags .flagged-post').length, 0);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
QUnit.test("flagged posts - delete + agree", assert => {
|
||||||
|
visit("/admin/flags/active");
|
||||||
|
click('.delete-flag');
|
||||||
|
andThen(() => {
|
||||||
|
assert.equal(find('.delete-flag-modal:visible').length, 1);
|
||||||
|
});
|
||||||
|
click('.delete-agree');
|
||||||
|
andThen(() => {
|
||||||
|
assert.equal(find('.delete-flag-modal:visible').length, 0);
|
||||||
|
assert.equal(find('.admin-flags .flagged-post').length, 0);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
QUnit.test("flagged posts - delete + deleteSpammer", assert => {
|
||||||
|
visit("/admin/flags/active");
|
||||||
|
click('.delete-flag');
|
||||||
|
andThen(() => {
|
||||||
|
assert.equal(find('.delete-flag-modal:visible').length, 1);
|
||||||
|
});
|
||||||
|
click('.delete-spammer');
|
||||||
|
click('.confirm-delete');
|
||||||
|
andThen(() => {
|
||||||
|
assert.equal(find('.delete-flag-modal:visible').length, 0);
|
||||||
|
assert.equal(find('.admin-flags .flagged-post').length, 0);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
QUnit.test("topics with flags", assert => {
|
||||||
|
visit("/admin/flags/topics");
|
||||||
|
andThen(() => {
|
||||||
|
assert.equal(find('.flagged-topics .flagged-topic').length, 1);
|
||||||
|
assert.equal(find('.flagged-topic .flagged-topic-user').length, 2);
|
||||||
|
assert.equal(find('.flagged-topic .flag-counts').length, 3);
|
||||||
|
});
|
||||||
|
|
||||||
|
click('.flagged-topic .show-details');
|
||||||
|
andThen(() => {
|
||||||
|
assert.equal(currentURL(), '/admin/flags/topics/280');
|
||||||
|
});
|
||||||
|
});
|
@ -1,11 +0,0 @@
|
|||||||
import { acceptance } from "helpers/qunit-helpers";
|
|
||||||
acceptance("Admin - Flagged Topics", { loggedIn: true });
|
|
||||||
|
|
||||||
QUnit.test("topics with flags", assert => {
|
|
||||||
visit("/admin/flags/topics");
|
|
||||||
andThen(() => {
|
|
||||||
assert.ok(exists('.watched-words-list'));
|
|
||||||
assert.ok(!exists('.watched-words-list .watched-word'), "Don't show bad words by default.");
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
|||||||
import storePretender from 'helpers/store-pretender';
|
import storePretender from 'helpers/store-pretender';
|
||||||
import fixturePretender from 'helpers/fixture-pretender';
|
import fixturePretender from 'helpers/fixture-pretender';
|
||||||
|
import flagPretender from 'helpers/flag-pretender';
|
||||||
|
|
||||||
export function parsePostData(query) {
|
export function parsePostData(query) {
|
||||||
const result = {};
|
const result = {};
|
||||||
@ -41,6 +42,7 @@ export default function() {
|
|||||||
|
|
||||||
const server = new Pretender(function() {
|
const server = new Pretender(function() {
|
||||||
storePretender.call(this, helpers);
|
storePretender.call(this, helpers);
|
||||||
|
flagPretender.call(this, helpers);
|
||||||
const fixturesByUrl = fixturePretender.call(this, helpers);
|
const fixturesByUrl = fixturePretender.call(this, helpers);
|
||||||
|
|
||||||
this.get('/admin/plugins', () => response({ plugins: [] }));
|
this.get('/admin/plugins', () => response({ plugins: [] }));
|
||||||
@ -66,7 +68,7 @@ export default function() {
|
|||||||
}] });
|
}] });
|
||||||
});
|
});
|
||||||
|
|
||||||
this.get(`/u/eviltrout/emails.json`, () => {
|
this.get(`/u/:username/emails.json`, () => {
|
||||||
return response({ email: 'eviltrout@example.com' });
|
return response({ email: 'eviltrout@example.com' });
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -323,14 +325,6 @@ export default function() {
|
|||||||
]);
|
]);
|
||||||
});
|
});
|
||||||
|
|
||||||
this.get('/admin/flagged_topics', () => {
|
|
||||||
return response(200, {
|
|
||||||
"flagged_topics": [
|
|
||||||
{ id: 1 }
|
|
||||||
]
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
this.get('/admin/customize/site_texts', request => {
|
this.get('/admin/customize/site_texts', request => {
|
||||||
|
|
||||||
if (request.queryParams.overridden) {
|
if (request.queryParams.overridden) {
|
||||||
@ -353,6 +347,7 @@ export default function() {
|
|||||||
this.get('/tag_groups', () => response(200, {tag_groups: []}));
|
this.get('/tag_groups', () => response(200, {tag_groups: []}));
|
||||||
this.post('/admin/users/:user_id/generate_api_key', success);
|
this.post('/admin/users/:user_id/generate_api_key', success);
|
||||||
this.delete('/admin/users/:user_id/revoke_api_key', success);
|
this.delete('/admin/users/:user_id/revoke_api_key', success);
|
||||||
|
this.delete('/admin/users/:user_id.json', () => response(200, { deleted: true }));
|
||||||
this.post('/admin/badges', success);
|
this.post('/admin/badges', success);
|
||||||
this.delete('/admin/badges/:id', success);
|
this.delete('/admin/badges/:id', success);
|
||||||
|
|
||||||
|
58
test/javascripts/helpers/flag-pretender.js.es6
Normal file
58
test/javascripts/helpers/flag-pretender.js.es6
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
export default function(helpers) {
|
||||||
|
const { response, success } = helpers;
|
||||||
|
|
||||||
|
const eviltrout = {
|
||||||
|
id: 1,
|
||||||
|
username: "eviltrout",
|
||||||
|
avatar_template:"/images/avatar.png",
|
||||||
|
};
|
||||||
|
const sam = {
|
||||||
|
id: 2,
|
||||||
|
username: "sam",
|
||||||
|
avatar_template:"/images/avatar.png",
|
||||||
|
can_delete_all_posts: true,
|
||||||
|
can_be_deleted: true,
|
||||||
|
post_count: 1,
|
||||||
|
topic_count: 0
|
||||||
|
};
|
||||||
|
|
||||||
|
this.get('/admin/flagged_topics', () => {
|
||||||
|
return response(200, {
|
||||||
|
"flagged_topics": [
|
||||||
|
{
|
||||||
|
id: 280,
|
||||||
|
user_ids: [eviltrout.id, sam.id],
|
||||||
|
flag_counts: [
|
||||||
|
{ flag_type_id: 1, count: 3 },
|
||||||
|
{ flag_type_id: 2, count: 2 },
|
||||||
|
{ flag_type_id: 3, count: 1 },
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"users": [ eviltrout, sam ],
|
||||||
|
"__rest_serializer":"1"
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
this.get('/admin/flags/active.json', () => {
|
||||||
|
return response(200, {
|
||||||
|
posts: [
|
||||||
|
{
|
||||||
|
id: 1,
|
||||||
|
user_id: sam.id,
|
||||||
|
post_actions: [{
|
||||||
|
user_id: eviltrout.id,
|
||||||
|
post_action_type_id: 8,
|
||||||
|
name_key: 'spam'
|
||||||
|
}]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
users: [eviltrout, sam],
|
||||||
|
topics: [],
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
this.post('/admin/flags/agree/1', success);
|
||||||
|
this.post('/admin/flags/defer/1', success);
|
||||||
|
this.post('/admin/flags/disagree/1', success);
|
||||||
|
}
|
Reference in New Issue
Block a user