From ae132db0c9fc0f937b1f4d33c1b62f51548c3db2 Mon Sep 17 00:00:00 2001 From: snewcomer Date: Sun, 11 Dec 2016 17:39:45 -0800 Subject: [PATCH] [STRIP FILE UPLOAD]: model + test --- ...161212005641_create_stripe_file_upload.exs | 15 +++++++ test/models/stripe_file_upload_test.exs | 43 +++++++++++++++++++ test/support/factories.ex | 6 +++ web/models/stripe_file_upload.ex | 24 +++++++++++ 4 files changed, 88 insertions(+) create mode 100644 priv/repo/migrations/20161212005641_create_stripe_file_upload.exs create mode 100644 test/models/stripe_file_upload_test.exs create mode 100644 web/models/stripe_file_upload.ex diff --git a/priv/repo/migrations/20161212005641_create_stripe_file_upload.exs b/priv/repo/migrations/20161212005641_create_stripe_file_upload.exs new file mode 100644 index 000000000..df8c8cb12 --- /dev/null +++ b/priv/repo/migrations/20161212005641_create_stripe_file_upload.exs @@ -0,0 +1,15 @@ +defmodule CodeCorps.Repo.Migrations.CreateStripeFileUpload do + use Ecto.Migration + + def change do + create table(:stripe_file_upload) do + add :created, :datetime + add :id_from_stripe, :string, null: false + add :purpose, :string + add :size, :integer + add :type, :string + add :url, :string + add :stripe_connect_account_id, references(:stripe_connect_accounts) + end + end +end diff --git a/test/models/stripe_file_upload_test.exs b/test/models/stripe_file_upload_test.exs new file mode 100644 index 000000000..b50c732e6 --- /dev/null +++ b/test/models/stripe_file_upload_test.exs @@ -0,0 +1,43 @@ +defmodule CodeCorps.StripeFileUploadTest do + use CodeCorps.ModelCase + + alias CodeCorps.StripeFileUpload + + @valid_attrs %{ + id_from_stripe: "abc123" + } + + @invalid_attrs %{} + + describe "create_identity_document_changeset/2" do + test "reports as valid when attributes are valid" do + changeset = StripeFileUpload.create_identity_document_changeset(%StripeFileUpload{}, @valid_attrs) + + assert changeset.valid? + end + + test "reports as invalid when attributes are invalid" do + changeset = StripeFileUpload.create_identity_document_changeset(%StripeFileUpload{}, @invalid_attrs) + refute changeset.valid? + + assert changeset.errors[:id_from_stripe] == {"can't be blank", []} + end + + test "can optionally belong to a StripeConnectAccount" do + stripe_connect_account_id = insert(:stripe_connect_account).id + changes = Map.merge(@valid_attrs, %{stripe_connect_account_id: stripe_connect_account_id}) + changeset = StripeFileUpload.create_identity_document_changeset(%StripeFileUpload{}, changes) + + assert changeset.valid? + end + + test "existing StripeConnectAccount association is required" do + stripe_connect_account_id = "abc456" + changes = Map.merge(@valid_attrs, %{stripe_connect_account_id: stripe_connect_account_id}) + changeset = StripeFileUpload.create_identity_document_changeset(%StripeFileUpload{}, changes) + + refute changeset.valid? + assert changeset.errors[:stripe_connect_account_id] == {"is invalid", [type: :id]} + end + end +end diff --git a/test/support/factories.ex b/test/support/factories.ex index 63c75b2dc..95ec0c3fb 100644 --- a/test/support/factories.ex +++ b/test/support/factories.ex @@ -142,6 +142,12 @@ defmodule CodeCorps.Factories do } end + def stripe_file_upload_factory do + %CodeCorps.StripeFileUpload{ + id_from_stripe: sequence(:id_from_stripe, &"stripe_id_#{&1}"), + } + end + def stripe_connect_subscription_factory do stripe_connect_plan = build(:stripe_connect_plan) %CodeCorps.StripeConnectSubscription{ diff --git a/web/models/stripe_file_upload.ex b/web/models/stripe_file_upload.ex new file mode 100644 index 000000000..682c6a587 --- /dev/null +++ b/web/models/stripe_file_upload.ex @@ -0,0 +1,24 @@ +defmodule CodeCorps.StripeFileUpload do + use CodeCorps.Web, :model + + schema "stripe_file_uploads" do + field :created, Timex.Ecto.DateTime + field :id_from_stripe, :string, null: false + field :purpose, :string + field :size, :integer + field :type, :string + field :url, :string + + belongs_to :stripe_connect_account, CodeCorps.StripeConnectAccount + + timestamps() + end + + def create_identity_document_changeset(struct, params \\ %{}) do + struct + |> cast(params, [:created, :id_from_stripe, :purpose, :size, :type, :url, :stripe_connect_account_id]) + |> validate_required([:id_from_stripe]) + |> assoc_constraint(:stripe_connect_account) + end + +end