diff --git a/lib/ad_service/query/for_display.ex b/lib/ad_service/query/for_display.ex
index 234ce3cc5..3d7f23f6d 100644
--- a/lib/ad_service/query/for_display.ex
+++ b/lib/ad_service/query/for_display.ex
@@ -2,7 +2,7 @@ defmodule AdService.Query.ForDisplay do
import Ecto.Query
alias AdService.UnrenderedAdvertisement
alias CodeFund.Campaigns
- alias CodeFund.Schema.{Audience, Campaign, Creative, Impression, Property}
+ alias CodeFund.Schema.{Campaign, Creative, Impression, Property}
def fallback_ad_by_property_id(property_id) do
from(property in Property,
@@ -30,7 +30,7 @@ defmodule AdService.Query.ForDisplay do
|> UnrenderedAdvertisement.one()
end
- def build(%Audience{} = audience, client_country, ip_address, excluded_advertisers \\ []) do
+ def build(%Property{} = property, client_country, ip_address, excluded_advertisers \\ []) do
from(
creative in Creative,
join: campaign in Campaign,
@@ -38,14 +38,44 @@ defmodule AdService.Query.ForDisplay do
join: large_image_asset in assoc(creative, :large_image_asset),
left_join: small_image_asset in assoc(creative, :small_image_asset),
left_join: wide_image_asset in assoc(creative, :wide_image_asset),
- join: audience in assoc(campaign, :audience),
distinct: campaign.id
)
|> where_country_in(client_country)
|> AdService.Query.TimeManagement.where_accepted_hours_for_ip_address(ip_address)
|> AdService.Query.TimeManagement.where_not_allowed_on_weekends(ip_address)
|> with_daily_budget()
- |> where([_creative, campaign, ...], campaign.audience_id == ^audience.id)
+ |> where(
+ [_creative, campaign, ...],
+ fragment(
+ "? && ?::varchar[]",
+ campaign.included_programming_languages,
+ ^property.programming_languages
+ )
+ )
+ |> where(
+ [_creative, campaign, ...],
+ fragment(
+ "? && ?::varchar[]",
+ campaign.included_topic_categories,
+ ^property.topic_categories
+ )
+ )
+ |> where(
+ [_creative, campaign, ...],
+ fragment(
+ "not ? && ?::varchar[]",
+ campaign.excluded_programming_languages,
+ ^property.programming_languages
+ )
+ )
+ |> where(
+ [_creative, campaign, ...],
+ fragment(
+ "not ? && ?::varchar[]",
+ campaign.excluded_topic_categories,
+ ^property.topic_categories
+ )
+ )
|> where(
[_creative, campaign, ...],
campaign.id not in ^Campaigns.list_of_ids_for_companies(excluded_advertisers)
diff --git a/lib/ad_service/server.ex b/lib/ad_service/server.ex
index 957b2026f..7fe4bdfaf 100644
--- a/lib/ad_service/server.ex
+++ b/lib/ad_service/server.ex
@@ -13,13 +13,12 @@ defmodule AdService.Server do
with {:ok, :no_cache_found} <- AdService.Impression.Cache.lookup(conn.remote_ip, property_id),
{:ok, %{country: client_country}} <-
Framework.Geolocation.find_by_ip(conn.remote_ip, :city),
- %Property{status: 1, audience: audience} = property
- when not is_nil(audience) <-
- Properties.get_property!(property_id) |> CodeFund.Repo.preload([:user, :audience]),
+ %Property{status: 1} = property <-
+ Properties.get_property!(property_id) |> CodeFund.Repo.preload([:user]),
:ok <- Framework.Browser.certify_human(conn),
{:ok, ad_tuple} <-
AdService.Query.ForDisplay.build(
- audience,
+ property,
client_country,
conn.remote_ip,
property.excluded_advertisers
diff --git a/lib/code_fund/audiences/audiences.ex b/lib/code_fund/audiences/audiences.ex
index 9aab1d602..7e48a84c4 100644
--- a/lib/code_fund/audiences/audiences.ex
+++ b/lib/code_fund/audiences/audiences.ex
@@ -132,12 +132,6 @@ defmodule CodeFund.Audiences do
Audience.changeset(audience, %{})
end
- def get_all_display_rates(%Audience{} = audience) do
- AdService.Query.ForDisplay.build(audience, nil, nil)
- |> CodeFund.Repo.all()
- |> AdService.Math.Basic.get_all_display_rates()
- end
-
defp filter_config(:audiences) do
defconfig do
text(:name)
diff --git a/lib/code_fund/properties/properties.ex b/lib/code_fund/properties/properties.ex
index 1eab521e1..0701ec864 100644
--- a/lib/code_fund/properties/properties.ex
+++ b/lib/code_fund/properties/properties.ex
@@ -139,8 +139,8 @@ defmodule CodeFund.Properties do
def get_property_by_name!(name),
do: Repo.get_by!(Property, name: name) |> Repo.preload([:user, :audience, :template])
- def get_all_display_rates(%Property{audience: audience}) when not is_nil(audience) do
- AdService.Query.ForDisplay.build(audience, nil, nil)
+ def get_all_display_rates(%Property{} = property) do
+ AdService.Query.ForDisplay.build(property, nil, nil)
|> CodeFund.Repo.all()
|> AdService.Math.Basic.get_all_display_rates()
end
diff --git a/lib/code_fund_web/templates/audience/index.html.eex b/lib/code_fund_web/templates/audience/index.html.eex
index 7342edb7a..1998e3c2b 100644
--- a/lib/code_fund_web/templates/audience/index.html.eex
+++ b/lib/code_fund_web/templates/audience/index.html.eex
@@ -24,7 +24,6 @@
Fallback Campaign |
<%= table_link(@conn, "Programming Languages", :programming_languages) %> |
<%= table_link(@conn, "Topic Categories", :topic_categories) %> |
- Advertisers |
|
@@ -35,13 +34,6 @@
<%= if audience.campaigns, do: audience.campaigns.name, else: "None" %> |
<%= truncate(audience.programming_languages |> Enum.join(", ")) %> |
<%= truncate(audience.topic_categories |> Enum.join(", ")) %> |
-
-
- <%= for advertiser <- CodeFund.Audiences.get_all_display_rates(audience) do %>
- - <%= Number.Percentage.number_to_percentage(advertiser.display_rate, precision: 1) %> <%= advertiser.campaign_name %>
- <% end %>
-
- |
<%= link 'Show', to: audience_path(@conn, :show, audience), class: "btn btn-outline-info btn-sm" %>
<%= link 'Edit', to: audience_path(@conn, :edit, audience), class: "btn btn-outline-primary btn-sm" %>
diff --git a/lib/code_fund_web/templates/property/index.html.eex b/lib/code_fund_web/templates/property/index.html.eex
index 38ac7640d..460f8c825 100644
--- a/lib/code_fund_web/templates/property/index.html.eex
+++ b/lib/code_fund_web/templates/property/index.html.eex
@@ -52,6 +52,9 @@
<%= if has_any_role? @conn, ["admin", "developer"] do %>
| Excluded Advertisers |
<% end %>
+ <%= if has_any_role? @conn, ["admin"] do %>
+ Advertisers |
+ <% end %>
|
@@ -71,6 +74,15 @@
<%= if has_any_role? @conn, ["admin", "developer"] do %>
<%= property.excluded_advertisers |> Enum.join(", ") %> |
<% end %>
+ <%= if has_any_role? @conn, ["admin"] do %>
+
+
+ <%= for advertiser <- CodeFund.Properties.get_all_display_rates(property) do %>
+ - <%= Number.Percentage.number_to_percentage(advertiser.display_rate, precision: 1) %> <%= advertiser.campaign_name %>
+ <% end %>
+
+ |
+ <% end %>
<%= link 'Show', to: property_path(@conn, :show, property), class: "btn btn-outline-info btn-sm" %>
<%= link 'Edit', to: property_path(@conn, :edit, property), class: "btn btn-outline-primary btn-sm" %>
diff --git a/test/ad_service/query/for_display_test.exs b/test/ad_service/query/for_display_test.exs
index e9c57d506..6d95f0639 100644
--- a/test/ad_service/query/for_display_test.exs
+++ b/test/ad_service/query/for_display_test.exs
@@ -29,6 +29,22 @@ defmodule AdService.Query.ForDisplayTest do
topic_categories: ["Development"]
})
+ property =
+ insert(:property, %{
+ programming_languages: ["Ruby", "C"],
+ topic_categories: ["Programming"]
+ })
+
+ insert(:property, %{
+ programming_languages: ["Ruby", "C"],
+ topic_categories: ["Development"]
+ })
+
+ insert(:property, %{
+ programming_languages: ["Ruby", "Rust"],
+ topic_categories: ["Programming"]
+ })
+
campaign =
insert(
:campaign,
@@ -40,6 +56,10 @@ defmodule AdService.Query.ForDisplayTest do
end_date: Timex.now() |> Timex.shift(days: 1) |> DateTime.to_naive(),
creative: creative,
audience: audience,
+ included_programming_languages: ["Ruby"],
+ included_topic_categories: ["Programming"],
+ excluded_programming_languages: ["Rust"],
+ excluded_topic_categories: ["Development"],
included_countries: ["US"],
user: insert(:user, company: "Acme")
)
@@ -54,6 +74,10 @@ defmodule AdService.Query.ForDisplayTest do
end_date: Timex.now() |> Timex.shift(days: -1) |> DateTime.to_naive(),
creative: creative,
audience: audience,
+ included_programming_languages: ["Rust"],
+ included_topic_categories: ["Development"],
+ excluded_programming_languages: ["Ruby"],
+ excluded_topic_categories: ["Programming"],
included_countries: ["US"]
)
@@ -66,6 +90,10 @@ defmodule AdService.Query.ForDisplayTest do
end_date: Timex.now() |> Timex.shift(days: 1) |> DateTime.to_naive(),
total_spend: Decimal.new(100),
creative: creative,
+ included_programming_languages: ["Rust"],
+ included_topic_categories: ["Development"],
+ excluded_programming_languages: ["Ruby"],
+ excluded_topic_categories: ["Programming"],
included_countries: ["IN"],
audience: insert(:audience, %{programming_languages: ["Java", "Rust"]})
)
@@ -80,12 +108,23 @@ defmodule AdService.Query.ForDisplayTest do
end_date: Timex.now() |> Timex.shift(days: 1) |> DateTime.to_naive(),
creative: creative,
audience: audience,
+ included_programming_languages: ["Rust"],
+ included_topic_categories: ["Development"],
+ excluded_programming_languages: ["Ruby"],
+ excluded_topic_categories: ["Programming"],
included_countries: ["CN"]
)
[cdn_host: cdn_host] = Application.get_env(:code_fund, Framework.FileStorage)
- {:ok, %{audience: audience, creative: creative, campaign: campaign, cdn_host: cdn_host}}
+ {:ok,
+ %{
+ audience: audience,
+ creative: creative,
+ campaign: campaign,
+ cdn_host: cdn_host,
+ property: property
+ }}
end
describe "fallback_ad_by_property_id/1" do
@@ -122,13 +161,13 @@ defmodule AdService.Query.ForDisplayTest do
end
describe "build/1" do
- test "get_by_property_filters excludes indicated countries", %{audience: audience} do
- refute AdService.Query.ForDisplay.build(audience, "CN", nil, ["Foobar"])
+ test "get_by_property_filters excludes indicated countries", %{property: property} do
+ refute AdService.Query.ForDisplay.build(property, "CN", nil, ["Foobar"])
|> CodeFund.Repo.one()
end
test "it returns advertisements by audience, included country and excluded advertisers", %{
- audience: audience,
+ property: property,
campaign: campaign,
creative: creative
} do
@@ -141,13 +180,16 @@ defmodule AdService.Query.ForDisplayTest do
start_date: Timex.now() |> Timex.shift(days: -1) |> DateTime.to_naive(),
end_date: Timex.now() |> Timex.shift(days: 1) |> DateTime.to_naive(),
creative: creative,
- audience: audience,
+ included_programming_languages: ["Ruby"],
+ included_topic_categories: ["Programming"],
+ excluded_programming_languages: ["Rust"],
+ excluded_topic_categories: ["Development"],
included_countries: ["US"],
user: insert(:user, company: "Foobar")
)
advertisement =
- AdService.Query.ForDisplay.build(audience, "US", nil, ["Foobar"])
+ AdService.Query.ForDisplay.build(property, "US", nil, ["Foobar"])
|> CodeFund.Repo.one()
small_image_asset = CodeFund.Schema.Asset |> Repo.get!(creative.small_image_asset.id)
@@ -178,7 +220,7 @@ defmodule AdService.Query.ForDisplayTest do
end
test "it excludes campaigns which are not allowed on the weekends when its a weekend", %{
- audience: audience,
+ property: property,
creative: creative
} do
CodeFund.Schema.Campaign
@@ -195,7 +237,10 @@ defmodule AdService.Query.ForDisplayTest do
end_date: Timex.now() |> Timex.shift(days: 1) |> DateTime.to_naive(),
creative: creative,
weekdays_only: true,
- audience: audience,
+ included_programming_languages: ["Ruby"],
+ included_topic_categories: ["Programming"],
+ excluded_programming_languages: ["Rust"],
+ excluded_topic_categories: ["Development"],
included_countries: ["US"],
user: insert(:user, company: "Acme")
)
@@ -203,14 +248,14 @@ defmodule AdService.Query.ForDisplayTest do
TimeMachinex.ManagedClock.set(DateTime.from_naive!(~N[2018-09-22 11:00:00], "Etc/UTC"))
advertisement =
- AdService.Query.ForDisplay.build(audience, "US", {72, 229, 28, 185}, ["Foobar"])
+ AdService.Query.ForDisplay.build(property, "US", {72, 229, 28, 185}, ["Foobar"])
|> CodeFund.Repo.one()
refute advertisement
end
test "it will exclude campaigns that are over their daily budget", %{
- audience: audience,
+ property: property,
creative: creative
} do
CodeFund.Schema.Campaign
@@ -227,7 +272,10 @@ defmodule AdService.Query.ForDisplayTest do
start_date: Timex.now() |> Timex.shift(days: -1) |> DateTime.to_naive(),
end_date: Timex.now() |> Timex.shift(days: 1) |> DateTime.to_naive(),
creative: creative,
- audience: audience,
+ included_programming_languages: ["Ruby"],
+ included_topic_categories: ["Programming"],
+ excluded_programming_languages: ["Rust"],
+ excluded_topic_categories: ["Development"],
included_countries: ["US"],
user: insert(:user, company: "Acme")
)
@@ -235,7 +283,7 @@ defmodule AdService.Query.ForDisplayTest do
insert(:impression, campaign: campaign, revenue_amount: Decimal.new(9.5))
advertisement =
- AdService.Query.ForDisplay.build(audience, "US", nil, ["Foobar"]) |> CodeFund.Repo.one()
+ AdService.Query.ForDisplay.build(property, "US", nil, ["Foobar"]) |> CodeFund.Repo.one()
refute advertisement
end
diff --git a/test/ad_service/server_test.exs b/test/ad_service/server_test.exs
index 1fa4c5477..538e51e14 100644
--- a/test/ad_service/server_test.exs
+++ b/test/ad_service/server_test.exs
@@ -32,15 +32,20 @@ defmodule AdService.ServerTest do
audience_2 = insert(:audience, name: "wrong one")
property =
- insert(
- :property,
- audience: audience_1
- )
+ insert(:property, %{
+ programming_languages: ["Ruby", "C"],
+ topic_categories: ["Programming"]
+ })
- insert(
- :property,
- audience: audience_2
- )
+ insert(:property, %{
+ programming_languages: ["Ruby", "C"],
+ topic_categories: ["Development"]
+ })
+
+ insert(:property, %{
+ programming_languages: ["Ruby", "Rust"],
+ topic_categories: ["Programming"]
+ })
assert CodeFund.Impressions.list_impressions() |> Enum.count() == 0
conn = conn |> Map.put(:remote_ip, {12, 109, 12, 14})
@@ -60,6 +65,10 @@ defmodule AdService.ServerTest do
end_date: Timex.now() |> Timex.shift(days: 1) |> DateTime.to_naive(),
creative: creative,
audience: audience_1,
+ included_programming_languages: ["Ruby"],
+ included_topic_categories: ["Programming"],
+ excluded_programming_languages: ["Rust"],
+ excluded_topic_categories: ["Development"],
included_countries: ["US"]
)
@@ -73,6 +82,10 @@ defmodule AdService.ServerTest do
end_date: Timex.now() |> Timex.shift(days: 1) |> DateTime.to_naive(),
creative: creative,
audience: audience_2,
+ included_programming_languages: ["Rust"],
+ included_topic_categories: ["Programming"],
+ excluded_programming_languages: ["Ruby", "C"],
+ excluded_topic_categories: ["Development"],
included_countries: ["US"]
)
@@ -123,20 +136,13 @@ defmodule AdService.ServerTest do
TimeMachinex.ManagedClock.set(DateTime.from_naive!(~N[1985-10-26 11:00:00], "Etc/UTC"))
creative = insert(:creative, small_image_asset: insert(:asset))
- audience_1 = insert(:audience, name: "right one")
- audience_2 = insert(:audience, name: "wrong one")
-
property =
insert(
:property,
- audience: audience_1
+ programming_languages: ["C"],
+ topic_categories: ["Programming"]
)
- insert(
- :property,
- audience: audience_2
- )
-
assert CodeFund.Impressions.list_impressions() |> Enum.count() == 0
conn = conn |> Map.put(:remote_ip, {12, 109, 12, 14})
@@ -150,7 +156,10 @@ defmodule AdService.ServerTest do
start_date: Timex.now() |> Timex.shift(days: -1) |> DateTime.to_naive(),
end_date: Timex.now() |> Timex.shift(days: 1) |> DateTime.to_naive(),
creative: creative,
- audience: audience_1,
+ included_programming_languages: ["C"],
+ included_topic_categories: ["Programming"],
+ excluded_programming_languages: ["Ruby"],
+ excluded_topic_categories: ["Development"],
included_countries: ["US"],
us_hours_only: false
)
@@ -164,7 +173,10 @@ defmodule AdService.ServerTest do
start_date: Timex.now() |> Timex.shift(days: -1) |> DateTime.to_naive(),
end_date: Timex.now() |> Timex.shift(days: 1) |> DateTime.to_naive(),
creative: creative,
- audience: audience_1,
+ included_programming_languages: ["C"],
+ included_topic_categories: ["Programming"],
+ excluded_programming_languages: ["Ruby"],
+ excluded_topic_categories: ["Development"],
included_countries: ["US"],
us_hours_only: true
)
@@ -178,8 +190,12 @@ defmodule AdService.ServerTest do
start_date: Timex.now() |> Timex.shift(days: -1) |> DateTime.to_naive(),
end_date: Timex.now() |> Timex.shift(days: 1) |> DateTime.to_naive(),
creative: creative,
- audience: audience_2,
- included_countries: ["US"]
+ included_programming_languages: ["Ruby"],
+ included_topic_categories: ["Development"],
+ excluded_programming_languages: ["Rust"],
+ excluded_topic_categories: ["Programming"],
+ included_countries: ["US"],
+ us_hours_only: false
)
advertisement =
@@ -232,7 +248,9 @@ defmodule AdService.ServerTest do
property =
insert(
:property,
- audience: audience
+ audience: audience,
+ programming_languages: ["C"],
+ topic_categories: ["Programming"]
)
assert CodeFund.Impressions.list_impressions() |> Enum.count() == 0
@@ -254,6 +272,10 @@ defmodule AdService.ServerTest do
end_date: Timex.now() |> Timex.shift(days: 1) |> DateTime.to_naive(),
creative: creative,
audience: audience,
+ included_programming_languages: ["C"],
+ included_topic_categories: ["Programming"],
+ excluded_programming_languages: ["Ruby"],
+ excluded_topic_categories: ["Development"],
included_countries: ["US"]
)
@@ -297,20 +319,15 @@ defmodule AdService.ServerTest do
%{conn: conn, cdn_host: cdn_host} do
creative = insert(:creative, small_image_asset: insert(:asset))
- audience_1 = insert(:audience, name: "right one")
- audience_2 = insert(:audience, name: "wrong one")
-
property =
insert(
:property,
- audience: audience_1
+ %{
+ programming_languages: ["C"],
+ topic_categories: ["Programming"]
+ }
)
- insert(
- :property,
- audience: audience_2
- )
-
assert CodeFund.Impressions.list_impressions() |> Enum.count() == 0
conn = conn |> Map.put(:remote_ip, {12, 109, 12, 14})
ip_string = conn.remote_ip |> Tuple.to_list() |> Enum.join(".")
@@ -328,7 +345,10 @@ defmodule AdService.ServerTest do
start_date: Timex.now() |> Timex.shift(days: -1) |> DateTime.to_naive(),
end_date: Timex.now() |> Timex.shift(days: 1) |> DateTime.to_naive(),
creative: creative,
- audience: audience_1,
+ included_programming_languages: ["C"],
+ included_topic_categories: ["Programming"],
+ excluded_programming_languages: ["Ruby"],
+ excluded_topic_categories: ["Development"],
included_countries: ["US"]
)
@@ -341,7 +361,10 @@ defmodule AdService.ServerTest do
start_date: Timex.now() |> Timex.shift(days: -1) |> DateTime.to_naive(),
end_date: Timex.now() |> Timex.shift(days: 1) |> DateTime.to_naive(),
creative: creative,
- audience: audience_2,
+ included_programming_languages: ["Ruby"],
+ included_topic_categories: ["Development"],
+ excluded_programming_languages: ["Rust"],
+ excluded_topic_categories: ["Programming"],
included_countries: ["US"]
)
@@ -441,12 +464,13 @@ defmodule AdService.ServerTest do
%{conn: conn, cdn_host: cdn_host} do
creative = insert(:creative, small_image_asset: insert(:asset))
- audience = insert(:audience)
-
property =
insert(
:property,
- audience: audience
+ %{
+ programming_languages: ["C"],
+ topic_categories: ["Programming"]
+ }
)
assert CodeFund.Impressions.list_impressions() |> Enum.count() == 0
@@ -466,7 +490,10 @@ defmodule AdService.ServerTest do
start_date: Timex.now() |> Timex.shift(days: -1) |> DateTime.to_naive(),
end_date: Timex.now() |> Timex.shift(days: 1) |> DateTime.to_naive(),
creative: creative,
- audience: audience,
+ included_programming_languages: ["C"],
+ included_topic_categories: ["Programming"],
+ excluded_programming_languages: ["Ruby"],
+ excluded_topic_categories: ["Development"],
included_countries: ["US"]
)
@@ -569,7 +596,11 @@ defmodule AdService.ServerTest do
insert(:campaign, creative: insert(:creative, small_image_asset: insert(:asset)))
property =
- insert(:property, audience: insert(:audience, fallback_campaign_id: fallback_campaign.id))
+ insert(:property,
+ programming_languages: ["Ruby", "C"],
+ topic_categories: ["Programming"],
+ audience: insert(:audience, fallback_campaign_id: fallback_campaign.id)
+ )
assert CodeFund.Impressions.list_impressions() |> Enum.count() == 0
@@ -697,9 +728,10 @@ defmodule AdService.ServerTest do
}
end
- test "returns an error if property is not assigned to an audience", %{
- conn: conn
- } do
+ test "returns an error if property has no audience(for fallback) or programming languages or topic categories",
+ %{
+ conn: conn
+ } do
property = insert(:property)
conn = conn |> Map.put(:remote_ip, {12, 109, 12, 14})
assert CodeFund.Impressions.list_impressions() |> Enum.count() == 0
@@ -712,7 +744,7 @@ defmodule AdService.ServerTest do
assert impression.property_id == property.id
assert impression.campaign_id == nil
assert impression.country == "US"
- assert impression.error_code == AdService.Impression.Errors.fetch_code(:property_inactive)
+ assert impression.error_code == AdService.Impression.Errors.fetch_code(:no_possible_ads)
assert advertisement == %AdService.AdvertisementImpression{
headline: "",
@@ -724,7 +756,7 @@ defmodule AdService.ServerTest do
small_image_url: "",
pixel: "//www.example.com/p/#{impression.id}/pixel.png",
poweredByLink: "https://codefund.io?utm_content=",
- reason: "This property is not currently active - code: 0"
+ reason: "CodeFund does not have an advertiser for you at this time - code: 2"
}
end
diff --git a/test/code_fund_web/controllers/api/ad_serve_controller_test.exs b/test/code_fund_web/controllers/api/ad_serve_controller_test.exs
index bd51137c7..acff1ee24 100644
--- a/test/code_fund_web/controllers/api/ad_serve_controller_test.exs
+++ b/test/code_fund_web/controllers/api/ad_serve_controller_test.exs
@@ -99,20 +99,15 @@ defmodule CodeFundWeb.API.AdServeControllerTest do
%{conn: conn, cdn_host: cdn_host} do
creative = insert(:creative, small_image_asset: insert(:asset))
- audience_1 = insert(:audience, name: "right one")
- audience_2 = insert(:audience, name: "wrong one")
-
property =
insert(
:property,
- audience: audience_1
+ %{
+ programming_languages: ["Ruby", "C"],
+ topic_categories: ["Programming"]
+ }
)
- insert(
- :property,
- audience: audience_2
- )
-
assert CodeFund.Impressions.list_impressions() |> Enum.count() == 0
conn = conn |> Map.put(:remote_ip, {12, 109, 12, 14})
ip_string = conn.remote_ip |> Tuple.to_list() |> Enum.join(".")
@@ -130,7 +125,10 @@ defmodule CodeFundWeb.API.AdServeControllerTest do
start_date: Timex.now() |> Timex.shift(days: -1) |> DateTime.to_naive(),
end_date: Timex.now() |> Timex.shift(days: 1) |> DateTime.to_naive(),
creative: creative,
- audience: audience_1,
+ included_programming_languages: ["Ruby"],
+ included_topic_categories: ["Programming"],
+ excluded_programming_languages: ["Rust"],
+ excluded_topic_categories: ["Development"],
included_countries: ["US"]
)
@@ -143,7 +141,10 @@ defmodule CodeFundWeb.API.AdServeControllerTest do
start_date: Timex.now() |> Timex.shift(days: -1) |> DateTime.to_naive(),
end_date: Timex.now() |> Timex.shift(days: 1) |> DateTime.to_naive(),
creative: creative,
- audience: audience_2,
+ included_programming_languages: ["Rust"],
+ included_topic_categories: ["Programming"],
+ excluded_programming_languages: ["Ruby", "C"],
+ excluded_topic_categories: ["Development"],
included_countries: ["US"]
)
diff --git a/test/code_fund_web/controllers/api/v1/property/impression_controller_test.exs b/test/code_fund_web/controllers/api/v1/property/impression_controller_test.exs
index c16f96be2..09aa5e4a8 100644
--- a/test/code_fund_web/controllers/api/v1/property/impression_controller_test.exs
+++ b/test/code_fund_web/controllers/api/v1/property/impression_controller_test.exs
@@ -6,12 +6,13 @@ defmodule CodeFundWeb.API.V1.Property.ImpressionControllerTest do
{:ok, _pid} = TimeMachinex.ManagedClock.start()
creative = insert(:creative, wide_image_asset: insert(:asset))
- audience = insert(:audience, name: "right one")
-
property =
insert(
:property,
- audience: audience
+ %{
+ programming_languages: ["Ruby", "C"],
+ topic_categories: ["Programming"]
+ }
)
campaign =
@@ -24,7 +25,10 @@ defmodule CodeFundWeb.API.V1.Property.ImpressionControllerTest do
start_date: Timex.now() |> Timex.shift(days: -1) |> DateTime.to_naive(),
end_date: Timex.now() |> Timex.shift(days: 1) |> DateTime.to_naive(),
creative: creative,
- audience: audience,
+ included_programming_languages: ["Ruby"],
+ included_topic_categories: ["Programming"],
+ excluded_programming_languages: ["Rust"],
+ excluded_topic_categories: ["Development"],
included_countries: ["US"]
)
diff --git a/test/code_fund_web/controllers/property_controller_test.exs b/test/code_fund_web/controllers/property_controller_test.exs
index f267a621c..4307bfa06 100644
--- a/test/code_fund_web/controllers/property_controller_test.exs
+++ b/test/code_fund_web/controllers/property_controller_test.exs
@@ -3,6 +3,7 @@ defmodule CodeFundWeb.PropertyControllerTest do
setup do
users = stub_users()
+ {:ok, _pid} = TimeMachinex.ManagedClock.start()
insert_pair(:user, company: "Foobar, Inc")
insert(:user, company: "BarFoo")
|