From 67b34600d54f1476b002291d6530f20ad31b73be Mon Sep 17 00:00:00 2001 From: Jarek Radosz Date: Thu, 26 Mar 2020 21:00:10 +0100 Subject: [PATCH] DEV: Use `type` instead of `method` in ajax calls (#8974) Even though `type` is an alias for `method`, we have custom logic in `/discourse/lib/ajax` that checks only `type`, and ~200 other ajax calls in the codebase already use `type` param. --- .../controllers/admin-customize-robots-txt.js | 4 ++-- .../controllers/admin-watched-words-action.js | 2 +- .../modals/admin-edit-badge-groupings.js | 2 +- .../controllers/modals/admin-install-theme.js | 2 +- .../admin/controllers/modals/admin-reseed.js | 2 +- .../admin/models/email-template.js | 2 +- .../admin/models/screened-email.js | 2 +- .../javascripts/admin/models/site-text.js | 2 +- .../admin/routes/admin-badges-show.js | 2 +- .../javascripts/discourse/adapters/post.js | 2 +- .../javascripts/discourse/adapters/rest.js | 2 +- .../components/reviewable-claimed-topic.js | 2 +- .../discourse/components/reviewable-item.js | 2 +- .../discourse/controllers/avatar-selector.js | 2 +- .../discourse/controllers/group-bulk-add.js | 2 +- .../discourse/controllers/review-settings.js | 2 +- .../discourse/controllers/static.js | 2 +- .../controllers/user-notifications.js | 2 +- app/assets/javascripts/discourse/lib/ajax.js | 5 +++++ .../javascripts/discourse/lib/export-csv.js | 2 +- .../javascripts/discourse/models/topic.js | 2 +- .../discourse/routes/application.js | 2 +- .../discourse/widgets/hamburger-menu.js | 2 +- .../widgets/quick-access-notifications.js | 2 +- .../pretty-text/upload-short-url.js | 2 +- test/javascripts/models/rest-model-test.js | 10 ++++------ test/javascripts/models/store-test.js | 19 ++++++++----------- 27 files changed, 42 insertions(+), 42 deletions(-) diff --git a/app/assets/javascripts/admin/controllers/admin-customize-robots-txt.js b/app/assets/javascripts/admin/controllers/admin-customize-robots-txt.js index 5c6d2499f4c..a3e43f20382 100644 --- a/app/assets/javascripts/admin/controllers/admin-customize-robots-txt.js +++ b/app/assets/javascripts/admin/controllers/admin-customize-robots-txt.js @@ -18,7 +18,7 @@ export default Controller.extend(bufferedProperty("model"), { }); ajax("robots.json", { - method: "PUT", + type: "PUT", data: { robots_txt: this.buffered.get("robots_txt") } }) .then(data => { @@ -34,7 +34,7 @@ export default Controller.extend(bufferedProperty("model"), { isSaving: true, saved: false }); - ajax("robots.json", { method: "DELETE" }) + ajax("robots.json", { type: "DELETE" }) .then(data => { this.buffered.set("robots_txt", data.robots_txt); this.commitBuffer(); diff --git a/app/assets/javascripts/admin/controllers/admin-watched-words-action.js b/app/assets/javascripts/admin/controllers/admin-watched-words-action.js index 5de00031a57..cf5815da730 100644 --- a/app/assets/javascripts/admin/controllers/admin-watched-words-action.js +++ b/app/assets/javascripts/admin/controllers/admin-watched-words-action.js @@ -92,7 +92,7 @@ export default Controller.extend({ result => { if (result) { ajax(`/admin/logs/watched_words/action/${actionKey}.json`, { - method: "DELETE" + type: "DELETE" }).then(() => { const action = this.findAction(actionKey); if (action) { diff --git a/app/assets/javascripts/admin/controllers/modals/admin-edit-badge-groupings.js b/app/assets/javascripts/admin/controllers/modals/admin-edit-badge-groupings.js index 7bc36038877..f1d1274abd5 100644 --- a/app/assets/javascripts/admin/controllers/modals/admin-edit-badge-groupings.js +++ b/app/assets/javascripts/admin/controllers/modals/admin-edit-badge-groupings.js @@ -65,7 +65,7 @@ export default Controller.extend(ModalFunctionality, { ajax("/admin/badges/badge_groupings", { data: { ids: groupIds, names }, - method: "POST" + type: "POST" }).then( data => { items = this.model; diff --git a/app/assets/javascripts/admin/controllers/modals/admin-install-theme.js b/app/assets/javascripts/admin/controllers/modals/admin-install-theme.js index 7c0036539c5..16cf2034d50 100644 --- a/app/assets/javascripts/admin/controllers/modals/admin-install-theme.js +++ b/app/assets/javascripts/admin/controllers/modals/admin-install-theme.js @@ -84,7 +84,7 @@ export default Controller.extend(ModalFunctionality, { const checked = this.privateChecked; if (checked && !this._keyLoading) { this._keyLoading = true; - ajax(this.keyGenUrl, { method: "POST" }) + ajax(this.keyGenUrl, { type: "POST" }) .then(pair => { this.setProperties({ privateKey: pair.private_key, diff --git a/app/assets/javascripts/admin/controllers/modals/admin-reseed.js b/app/assets/javascripts/admin/controllers/modals/admin-reseed.js index 176c46be36b..326a3a66a7b 100644 --- a/app/assets/javascripts/admin/controllers/modals/admin-reseed.js +++ b/app/assets/javascripts/admin/controllers/modals/admin-reseed.js @@ -31,7 +31,7 @@ export default Controller.extend(ModalFunctionality, { category_ids: this._extractSelectedIds(this.categories), topic_ids: this._extractSelectedIds(this.topics) }, - method: "POST" + type: "POST" }) .then( () => this.send("closeModal"), diff --git a/app/assets/javascripts/admin/models/email-template.js b/app/assets/javascripts/admin/models/email-template.js index 2dddb272dc3..550148e0abe 100644 --- a/app/assets/javascripts/admin/models/email-template.js +++ b/app/assets/javascripts/admin/models/email-template.js @@ -5,7 +5,7 @@ const { getProperties } = Ember; export default RestModel.extend({ revert() { return ajax(`/admin/customize/email_templates/${this.id}`, { - method: "DELETE" + type: "DELETE" }).then(result => getProperties(result.email_template, "subject", "body", "can_revert") ); diff --git a/app/assets/javascripts/admin/models/screened-email.js b/app/assets/javascripts/admin/models/screened-email.js index ea725105515..4ef3217edf3 100644 --- a/app/assets/javascripts/admin/models/screened-email.js +++ b/app/assets/javascripts/admin/models/screened-email.js @@ -10,7 +10,7 @@ const ScreenedEmail = EmberObject.extend({ clearBlock: function() { return ajax("/admin/logs/screened_emails/" + this.id, { - method: "DELETE" + type: "DELETE" }); } }); diff --git a/app/assets/javascripts/admin/models/site-text.js b/app/assets/javascripts/admin/models/site-text.js index 8bcb8c7f0f9..793ab33b546 100644 --- a/app/assets/javascripts/admin/models/site-text.js +++ b/app/assets/javascripts/admin/models/site-text.js @@ -5,7 +5,7 @@ const { getProperties } = Ember; export default RestModel.extend({ revert() { return ajax(`/admin/customize/site_texts/${this.id}`, { - method: "DELETE" + type: "DELETE" }).then(result => getProperties(result.site_text, "value", "can_revert")); } }); diff --git a/app/assets/javascripts/admin/routes/admin-badges-show.js b/app/assets/javascripts/admin/routes/admin-badges-show.js index 67acdcba587..4a29cfae0ad 100644 --- a/app/assets/javascripts/admin/routes/admin-badges-show.js +++ b/app/assets/javascripts/admin/routes/admin-badges-show.js @@ -40,7 +40,7 @@ export default Route.extend({ preview(badge, explain) { badge.set("preview_loading", true); ajax("/admin/badges/preview.json", { - method: "post", + type: "POST", data: { sql: badge.get("query"), target_posts: !!badge.get("target_posts"), diff --git a/app/assets/javascripts/discourse/adapters/post.js b/app/assets/javascripts/discourse/adapters/post.js index 950198067e2..1382d8d1f37 100644 --- a/app/assets/javascripts/discourse/adapters/post.js +++ b/app/assets/javascripts/discourse/adapters/post.js @@ -13,7 +13,7 @@ export default RestAdapter.extend({ createRecord(store, type, args) { const typeField = underscore(type); args.nested_post = true; - return ajax(this.pathFor(store, type), { method: "POST", data: args }).then( + return ajax(this.pathFor(store, type), { type: "POST", data: args }).then( function(json) { return new Result(json[typeField], json); } diff --git a/app/assets/javascripts/discourse/adapters/rest.js b/app/assets/javascripts/discourse/adapters/rest.js index bc2839985fd..e92f325f84a 100644 --- a/app/assets/javascripts/discourse/adapters/rest.js +++ b/app/assets/javascripts/discourse/adapters/rest.js @@ -133,7 +133,7 @@ export default EmberObject.extend({ destroyRecord(store, type, record) { return ajax(this.pathFor(store, type, record.get("id")), { - method: "DELETE" + type: "DELETE" }); } }); diff --git a/app/assets/javascripts/discourse/components/reviewable-claimed-topic.js b/app/assets/javascripts/discourse/components/reviewable-claimed-topic.js index 273b51afa7f..5ebc97aeb09 100644 --- a/app/assets/javascripts/discourse/components/reviewable-claimed-topic.js +++ b/app/assets/javascripts/discourse/components/reviewable-claimed-topic.js @@ -14,7 +14,7 @@ export default Component.extend({ actions: { unclaim() { ajax(`/reviewable_claimed_topics/${this.topicId}`, { - method: "DELETE" + type: "DELETE" }).then(() => { this.set("claimedBy", null); }); diff --git a/app/assets/javascripts/discourse/components/reviewable-item.js b/app/assets/javascripts/discourse/components/reviewable-item.js index c301f1aa930..6f627104784 100644 --- a/app/assets/javascripts/discourse/components/reviewable-item.js +++ b/app/assets/javascripts/discourse/components/reviewable-item.js @@ -97,7 +97,7 @@ export default Component.extend({ return ajax( `/review/${reviewable.id}/perform/${action.id}?version=${version}`, { - method: "PUT" + type: "PUT" } ) .then(result => { diff --git a/app/assets/javascripts/discourse/controllers/avatar-selector.js b/app/assets/javascripts/discourse/controllers/avatar-selector.js index 5fdbe79e3e4..38d5da9a697 100644 --- a/app/assets/javascripts/discourse/controllers/avatar-selector.js +++ b/app/assets/javascripts/discourse/controllers/avatar-selector.js @@ -63,7 +63,7 @@ export default Controller.extend(ModalFunctionality, { return ajax( `/user_avatar/${this.get("user.username")}/refresh_gravatar.json`, - { method: "POST" } + { type: "POST" } ) .then(result => { if (!result.gravatar_upload_id) { diff --git a/app/assets/javascripts/discourse/controllers/group-bulk-add.js b/app/assets/javascripts/discourse/controllers/group-bulk-add.js index 0310d4e3094..cf4f86916cf 100644 --- a/app/assets/javascripts/discourse/controllers/group-bulk-add.js +++ b/app/assets/javascripts/discourse/controllers/group-bulk-add.js @@ -31,7 +31,7 @@ export default Controller.extend(ModalFunctionality, { ajax("/admin/groups/bulk", { data: { users, group_id: this.get("model.id") }, - method: "PUT" + type: "PUT" }) .then(result => { this.set("result", result); diff --git a/app/assets/javascripts/discourse/controllers/review-settings.js b/app/assets/javascripts/discourse/controllers/review-settings.js index 8e670adb2a6..e98e4d8c377 100644 --- a/app/assets/javascripts/discourse/controllers/review-settings.js +++ b/app/assets/javascripts/discourse/controllers/review-settings.js @@ -15,7 +15,7 @@ export default Controller.extend({ this.set("saving", true); ajax("/review/settings", { - method: "PUT", + type: "PUT", data: { reviewable_priorities: priorities } }) .then(() => { diff --git a/app/assets/javascripts/discourse/controllers/static.js b/app/assets/javascripts/discourse/controllers/static.js index 9f139b6d928..9474c20c640 100644 --- a/app/assets/javascripts/discourse/controllers/static.js +++ b/app/assets/javascripts/discourse/controllers/static.js @@ -23,7 +23,7 @@ export default Controller.extend({ markFaqRead() { const currentUser = this.currentUser; if (currentUser) { - ajax(userPath("read-faq"), { method: "POST" }).then(() => { + ajax(userPath("read-faq"), { type: "POST" }).then(() => { currentUser.set("read_faq", true); }); } diff --git a/app/assets/javascripts/discourse/controllers/user-notifications.js b/app/assets/javascripts/discourse/controllers/user-notifications.js index b6cceef185e..dc9147105e1 100644 --- a/app/assets/javascripts/discourse/controllers/user-notifications.js +++ b/app/assets/javascripts/discourse/controllers/user-notifications.js @@ -28,7 +28,7 @@ export default Controller.extend({ actions: { resetNew() { - ajax("/notifications/mark-read", { method: "PUT" }).then(() => { + ajax("/notifications/mark-read", { type: "PUT" }).then(() => { this.model.forEach(n => n.set("read", true)); }); }, diff --git a/app/assets/javascripts/discourse/lib/ajax.js b/app/assets/javascripts/discourse/lib/ajax.js index 37052a4d793..e2318b0d9fe 100644 --- a/app/assets/javascripts/discourse/lib/ajax.js +++ b/app/assets/javascripts/discourse/lib/ajax.js @@ -139,6 +139,11 @@ export function ajax() { }); }; + if (args.method) { + args.type = args.method; + delete args.method; + } + // We default to JSON on GET. If we don't, sometimes if the server doesn't return the proper header // it will not be parsed as an object. if (!args.type) args.type = "GET"; diff --git a/app/assets/javascripts/discourse/lib/export-csv.js b/app/assets/javascripts/discourse/lib/export-csv.js index 39b19771f36..41957f9bf5f 100644 --- a/app/assets/javascripts/discourse/lib/export-csv.js +++ b/app/assets/javascripts/discourse/lib/export-csv.js @@ -3,7 +3,7 @@ import { popupAjaxError } from "discourse/lib/ajax-error"; function exportEntityByType(type, entity, args) { return ajax("/export_csv/export_entity.json", { - method: "POST", + type: "POST", data: { entity, args } }); } diff --git a/app/assets/javascripts/discourse/models/topic.js b/app/assets/javascripts/discourse/models/topic.js index ea118dbc7af..26afbd4ba2b 100644 --- a/app/assets/javascripts/discourse/models/topic.js +++ b/app/assets/javascripts/discourse/models/topic.js @@ -634,7 +634,7 @@ const Topic = RestModel.extend({ updateDestinationCategory(categoryId) { this.set("destination_category_id", categoryId); return ajax(`/t/${this.id}/shared-draft`, { - method: "PUT", + type: "PUT", data: { category_id: categoryId } }); }, diff --git a/app/assets/javascripts/discourse/routes/application.js b/app/assets/javascripts/discourse/routes/application.js index 0a028cdcebf..07926eb5684 100644 --- a/app/assets/javascripts/discourse/routes/application.js +++ b/app/assets/javascripts/discourse/routes/application.js @@ -29,7 +29,7 @@ const ApplicationRoute = DiscourseRoute.extend(OpenComposer, { actions: { toggleAnonymous() { - ajax(userPath("toggle-anon"), { method: "POST" }).then(() => { + ajax(userPath("toggle-anon"), { type: "POST" }).then(() => { window.location.reload(); }); }, diff --git a/app/assets/javascripts/discourse/widgets/hamburger-menu.js b/app/assets/javascripts/discourse/widgets/hamburger-menu.js index 912594351e5..48af267c166 100644 --- a/app/assets/javascripts/discourse/widgets/hamburger-menu.js +++ b/app/assets/javascripts/discourse/widgets/hamburger-menu.js @@ -26,7 +26,7 @@ createWidget("priority-faq-link", { click(e) { e.preventDefault(); if (this.siteSettings.faq_url === this.attrs.href) { - ajax(userPath("read-faq"), { method: "POST" }).then(() => { + ajax(userPath("read-faq"), { type: "POST" }).then(() => { this.currentUser.set("read_faq", true); DiscourseURL.routeToTag($(e.target).closest("a")[0]); }); diff --git a/app/assets/javascripts/discourse/widgets/quick-access-notifications.js b/app/assets/javascripts/discourse/widgets/quick-access-notifications.js index 515e702ace9..2841da9a84d 100644 --- a/app/assets/javascripts/discourse/widgets/quick-access-notifications.js +++ b/app/assets/javascripts/discourse/widgets/quick-access-notifications.js @@ -7,7 +7,7 @@ createWidgetFrom(QuickAccessPanel, "quick-access-notifications", { emptyStatePlaceholderItemKey: "notifications.empty", markReadRequest() { - return ajax("/notifications/mark-read", { method: "PUT" }); + return ajax("/notifications/mark-read", { type: "PUT" }); }, newItemsLoaded() { diff --git a/app/assets/javascripts/pretty-text/upload-short-url.js b/app/assets/javascripts/pretty-text/upload-short-url.js index 401d73dff09..87d948693df 100644 --- a/app/assets/javascripts/pretty-text/upload-short-url.js +++ b/app/assets/javascripts/pretty-text/upload-short-url.js @@ -15,7 +15,7 @@ export function lookupUncachedUploadUrls(urls, ajax) { } return ajax("/uploads/lookup-urls", { - method: "POST", + type: "POST", data: { short_urls: urls } }).then(uploads => { uploads.forEach(upload => { diff --git a/test/javascripts/models/rest-model-test.js b/test/javascripts/models/rest-model-test.js index 8213e96e8d6..c6aea1e7dd1 100644 --- a/test/javascripts/models/rest-model-test.js +++ b/test/javascripts/models/rest-model-test.js @@ -100,13 +100,11 @@ QUnit.test("creating simultaneously", assert => { }); }); -QUnit.test("destroyRecord", assert => { +QUnit.test("destroyRecord", async assert => { const store = createStore(); - return store.find("widget", 123).then(function(widget) { - widget.destroyRecord().then(function(result) { - assert.ok(result); - }); - }); + const widget = await store.find("widget", 123); + + assert.ok(await widget.destroyRecord()); }); QUnit.test("custom api name", async assert => { diff --git a/test/javascripts/models/store-test.js b/test/javascripts/models/store-test.js index 2e220b152c5..386094151c3 100644 --- a/test/javascripts/models/store-test.js +++ b/test/javascripts/models/store-test.js @@ -114,21 +114,18 @@ QUnit.test("findAll", async assert => { assert.equal(widget.get("name"), "Evil Repellant"); }); -QUnit.test("destroyRecord", function(assert) { +QUnit.test("destroyRecord", async assert => { const store = createStore(); - return store.find("widget", 123).then(function(w) { - store.destroyRecord("widget", w).then(function(result) { - assert.ok(result); - }); - }); + const widget = await store.find("widget", 123); + + assert.ok(await store.destroyRecord("widget", widget)); }); -QUnit.test("destroyRecord when new", function(assert) { +QUnit.test("destroyRecord when new", async assert => { const store = createStore(); - const w = store.createRecord("widget", { name: "hello" }); - store.destroyRecord("widget", w).then(function(result) { - assert.ok(result); - }); + const widget = store.createRecord("widget", { name: "hello" }); + + assert.ok(await store.destroyRecord("widget", widget)); }); QUnit.test("find embedded", async assert => {