mirror of
https://github.com/discourse/discourse-adplugin.git
synced 2025-03-09 13:19:11 +00:00
# Description This PR adds the ability to apply **group** and **category** restrictions to a **house ad**. # What is included - In order to get the group and category selectors to work within `admin/assets/javascripts/discourse/controllers/admin-plugins-house-ads-show.js` I needed to modernize the file. - I dropped the `bufferedProperty` implementation in favor of a vanilla ember approach - I added `category_ids` and `group_ids` to our house ads model - I added tests for group / category restrictions - I added a preview button to display the house ad - `/site.json` would return a object called `house_creatives` and a list of key value pairs that matched the ad name with the html, like so: ```js { AD_KEY: ad.html } ``` I need access to the category ids on the client to conditionally render the house ads so the new format will be: ```js { AD_KEY: { html: ad.html, category_ids: ad.category_ids } } ``` # Screenshots <img width="658" alt="Screenshot 2024-04-08 at 2 39 22 PM" src="https://github.com/discourse/discourse-adplugin/assets/50783505/b44b386d-65a1-4a2a-a487-d735b13357dd"> # Preview Video https://github.com/discourse/discourse-adplugin/assets/50783505/6d0d8253-afef-4e15-b6fc-c6f696efd169
80 lines
2.4 KiB
Ruby
80 lines
2.4 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
describe AdPlugin::HouseAdsController do
|
|
let(:admin) { Fabricate(:admin) }
|
|
let(:category) { Fabricate(:category) }
|
|
let(:group) { Fabricate(:group) }
|
|
|
|
let!(:ad) do
|
|
AdPlugin::HouseAd.create(
|
|
name: "Banner",
|
|
html: "<p>Banner</p>",
|
|
visible_to_anons: true,
|
|
visible_to_logged_in_users: false,
|
|
category_ids: [],
|
|
group_ids: [],
|
|
)
|
|
end
|
|
|
|
describe "#update" do
|
|
context "when used by admins" do
|
|
before { sign_in(admin) }
|
|
|
|
it "updates an existing ad" do
|
|
put "/admin/plugins/pluginad/house_creatives/#{ad.id}.json",
|
|
params: {
|
|
name: ad.name,
|
|
html: ad.html,
|
|
visible_to_anons: "false",
|
|
visible_to_logged_in_users: "true",
|
|
category_ids: [category.id],
|
|
group_ids: [group.id],
|
|
}
|
|
expect(response.status).to eq(200)
|
|
expect(response.parsed_body["house_ad"].symbolize_keys).to eq(
|
|
id: ad.id,
|
|
name: ad.name,
|
|
html: ad.html,
|
|
visible_to_anons: false,
|
|
visible_to_logged_in_users: true,
|
|
category_ids: [category.id],
|
|
group_ids: [group.id],
|
|
)
|
|
|
|
ad_copy = AdPlugin::HouseAd.find(ad.id)
|
|
expect(ad_copy.name).to eq(ad.name)
|
|
expect(ad_copy.html).to eq(ad.html)
|
|
expect(ad_copy.visible_to_anons).to eq(false)
|
|
expect(ad_copy.visible_to_logged_in_users).to eq(true)
|
|
expect(ad_copy.category_ids).to eq([category.id])
|
|
expect(ad_copy.group_ids).to eq([group.id])
|
|
end
|
|
end
|
|
|
|
context "when used by non-admins" do
|
|
before { sign_in(Fabricate(:user)) }
|
|
|
|
it "can't update ads" do
|
|
put "/admin/plugins/pluginad/house_creatives/#{ad.id}.json",
|
|
params: {
|
|
name: "non sense goes here",
|
|
html: "blah <h4cked>",
|
|
visible_to_anons: "false",
|
|
visible_to_logged_in_users: "true",
|
|
group_ids: [group.id],
|
|
category_ids: [category.id],
|
|
}
|
|
expect(response.status).to eq(404)
|
|
|
|
ad_copy = AdPlugin::HouseAd.find(ad.id)
|
|
expect(ad_copy.name).to eq(ad.name)
|
|
expect(ad_copy.html).to eq(ad.html)
|
|
expect(ad_copy.visible_to_anons).to eq(true)
|
|
expect(ad_copy.visible_to_logged_in_users).to eq(false)
|
|
expect(ad_copy.category_ids).to eq([])
|
|
expect(ad_copy.group_ids).to eq([])
|
|
end
|
|
end
|
|
end
|
|
end
|