diff --git a/lib/code_corps/helpers/query.ex b/lib/code_corps/helpers/query.ex index f8cafe604..bab9ee71b 100644 --- a/lib/code_corps/helpers/query.ex +++ b/lib/code_corps/helpers/query.ex @@ -7,6 +7,14 @@ defmodule CodeCorps.Helpers.Query do query |> where([object], object.id in ^ids) end + # project queries + + def approved_filter(query, approved) do + query |> where([object], object.approved == ^approved) + end + + # end project queries + # skill queries def limit_filter(query, %{"limit" => count}) do diff --git a/test/controllers/project_controller_test.exs b/test/controllers/project_controller_test.exs index 6fad6a4d6..f331a30ee 100644 --- a/test/controllers/project_controller_test.exs +++ b/test/controllers/project_controller_test.exs @@ -5,8 +5,9 @@ defmodule CodeCorps.ProjectControllerTest do @invalid_attrs %{title: ""} describe "index" do - test "lists all entries on index", %{conn: conn} do - [project_1, project_2] = insert_pair(:project) + test "lists all approved entries on index", %{conn: conn} do + [project_1, project_2] = insert_pair(:project, approved: true) + insert(:project, approved: false) conn |> request_index diff --git a/test/support/factories.ex b/test/support/factories.ex index 9ccaa5241..3725013e5 100644 --- a/test/support/factories.ex +++ b/test/support/factories.ex @@ -75,11 +75,13 @@ defmodule CodeCorps.Factories do def project_factory do %CodeCorps.Project{ - title: sequence(:title, &"Project #{&1}"), + approved: true, slug: sequence(:slug, &"project-#{&1}"), + title: sequence(:title, &"Project #{&1}"), + website: sequence(:website, &"http://test-#{&1}.com"), + organization: build(:organization), - owner: build(:user), - website: sequence(:website, &"http://test-#{&1}.com") + owner: build(:user) } end diff --git a/test/views/project_view_test.exs b/test/views/project_view_test.exs index b74ba22de..43f85b015 100644 --- a/test/views/project_view_test.exs +++ b/test/views/project_view_test.exs @@ -4,7 +4,7 @@ defmodule CodeCorps.ProjectViewTest do test "renders all attributes and relationships properly" do user = insert(:user) organization = insert(:organization) - project = insert(:project, organization: organization, owner: user, total_monthly_donated: 5000, default_color: "blue") + project = insert(:project, organization: organization, owner: user, total_monthly_donated: 5000, default_color: "blue", approved: true) donation_goal = insert(:donation_goal, project: project) project_category = insert(:project_category, project: project) @@ -21,6 +21,7 @@ defmodule CodeCorps.ProjectViewTest do expected_json = %{ "data" => %{ "attributes" => %{ + "approved" => true, "can-activate-donations" => false, "cloudinary-public-id" => nil, "description" => project.description, diff --git a/web/controllers/project_controller.ex b/web/controllers/project_controller.ex index 637c3af7b..b0c8f5487 100644 --- a/web/controllers/project_controller.ex +++ b/web/controllers/project_controller.ex @@ -2,7 +2,7 @@ defmodule CodeCorps.ProjectController do use CodeCorps.Web, :controller use JaResource - import CodeCorps.Helpers.Query, only: [slug_finder: 2] + import CodeCorps.Helpers.Query, only: [approved_filter: 2, slug_finder: 2] alias CodeCorps.Project @@ -21,7 +21,10 @@ defmodule CodeCorps.ProjectController do Project |> Repo.all(organization_id: slugged_route.organization_id) end - def handle_index(_conn, _params), do: Project + def handle_index(_conn, _params) do + Project + |> approved_filter(true) + end def handle_create(_conn, attributes) do %Project{} |> Project.create_changeset(attributes) diff --git a/web/views/project_view.ex b/web/views/project_view.ex index 14f3ae7be..f86e5979f 100644 --- a/web/views/project_view.ex +++ b/web/views/project_view.ex @@ -12,11 +12,11 @@ defmodule CodeCorps.ProjectView do use JaSerializer.PhoenixView attributes [ - :slug, :title, :can_activate_donations, :cloudinary_public_id, + :approved, :can_activate_donations, :cloudinary_public_id, :description, :donations_active, :icon_thumb_url, - :icon_large_url, :long_description_body, :long_description_markdown, - :inserted_at, :should_link_externally, :total_monthly_donated, :updated_at, - :website + :icon_large_url, :inserted_at, :long_description_body, + :long_description_markdown, :should_link_externally, :slug, :title, + :total_monthly_donated, :updated_at, :website ] has_one :organization, serializer: CodeCorps.OrganizationView