Testing Virtual Fields returning nil in Phoenix
I have a basic user
schema that contains password_digest
to be saved in db and virtual fields password
that user will input, hashed, saved as password_digest.
The problem is when testing, I am getting password as nil on one side of comparison while the other I have them as non-nil. I am not sure what the best practice is when testing virtual fields.
Error msg:
...
Assertion with == failed
code: assert Accounts.get_user!(user.id()) == user
left: ... username: "some username", password: nil}
right: ... username: "some username", password: "some password"}
schema "users" do
field :email, :string
field :password_digest, :string
field :username, :string
timestamps()
field :password, :string, virtual: true
end
Here is the relevant codes:
def changeset(user, attrs) do
user
|> cast(attrs, [:username, :email, :password])
|> hash_password
|> validate_required([:username, :email, :password, :password_digest])
end
defp hash_password(changeset) do
if password = get_change(changeset, :password) do
changeset
|> put_change(:password_digest, hashpwsalt(password))
else
changeset
end
end
Inside the test, I have these:
@valid_attrs %{email: "some email", password: "some password", username: "some username"}
def user_fixture(attrs \ %{}) do
{:ok, user} =
attrs
|> Enum.into(@valid_attrs)
|> Accounts.create_user()
user
end
...
test "get_user!/1 returns the user with given id" do
user = user_fixture()
assert Accounts.get_user!(user.id) == user
end
Btw, get_user is straight from generator: def get_user!(id), do: Repo.get!(User, id)
What is the proper way to test virtual field?
testing phoenix-framework
add a comment |
I have a basic user
schema that contains password_digest
to be saved in db and virtual fields password
that user will input, hashed, saved as password_digest.
The problem is when testing, I am getting password as nil on one side of comparison while the other I have them as non-nil. I am not sure what the best practice is when testing virtual fields.
Error msg:
...
Assertion with == failed
code: assert Accounts.get_user!(user.id()) == user
left: ... username: "some username", password: nil}
right: ... username: "some username", password: "some password"}
schema "users" do
field :email, :string
field :password_digest, :string
field :username, :string
timestamps()
field :password, :string, virtual: true
end
Here is the relevant codes:
def changeset(user, attrs) do
user
|> cast(attrs, [:username, :email, :password])
|> hash_password
|> validate_required([:username, :email, :password, :password_digest])
end
defp hash_password(changeset) do
if password = get_change(changeset, :password) do
changeset
|> put_change(:password_digest, hashpwsalt(password))
else
changeset
end
end
Inside the test, I have these:
@valid_attrs %{email: "some email", password: "some password", username: "some username"}
def user_fixture(attrs \ %{}) do
{:ok, user} =
attrs
|> Enum.into(@valid_attrs)
|> Accounts.create_user()
user
end
...
test "get_user!/1 returns the user with given id" do
user = user_fixture()
assert Accounts.get_user!(user.id) == user
end
Btw, get_user is straight from generator: def get_user!(id), do: Repo.get!(User, id)
What is the proper way to test virtual field?
testing phoenix-framework
add a comment |
I have a basic user
schema that contains password_digest
to be saved in db and virtual fields password
that user will input, hashed, saved as password_digest.
The problem is when testing, I am getting password as nil on one side of comparison while the other I have them as non-nil. I am not sure what the best practice is when testing virtual fields.
Error msg:
...
Assertion with == failed
code: assert Accounts.get_user!(user.id()) == user
left: ... username: "some username", password: nil}
right: ... username: "some username", password: "some password"}
schema "users" do
field :email, :string
field :password_digest, :string
field :username, :string
timestamps()
field :password, :string, virtual: true
end
Here is the relevant codes:
def changeset(user, attrs) do
user
|> cast(attrs, [:username, :email, :password])
|> hash_password
|> validate_required([:username, :email, :password, :password_digest])
end
defp hash_password(changeset) do
if password = get_change(changeset, :password) do
changeset
|> put_change(:password_digest, hashpwsalt(password))
else
changeset
end
end
Inside the test, I have these:
@valid_attrs %{email: "some email", password: "some password", username: "some username"}
def user_fixture(attrs \ %{}) do
{:ok, user} =
attrs
|> Enum.into(@valid_attrs)
|> Accounts.create_user()
user
end
...
test "get_user!/1 returns the user with given id" do
user = user_fixture()
assert Accounts.get_user!(user.id) == user
end
Btw, get_user is straight from generator: def get_user!(id), do: Repo.get!(User, id)
What is the proper way to test virtual field?
testing phoenix-framework
I have a basic user
schema that contains password_digest
to be saved in db and virtual fields password
that user will input, hashed, saved as password_digest.
The problem is when testing, I am getting password as nil on one side of comparison while the other I have them as non-nil. I am not sure what the best practice is when testing virtual fields.
Error msg:
...
Assertion with == failed
code: assert Accounts.get_user!(user.id()) == user
left: ... username: "some username", password: nil}
right: ... username: "some username", password: "some password"}
schema "users" do
field :email, :string
field :password_digest, :string
field :username, :string
timestamps()
field :password, :string, virtual: true
end
Here is the relevant codes:
def changeset(user, attrs) do
user
|> cast(attrs, [:username, :email, :password])
|> hash_password
|> validate_required([:username, :email, :password, :password_digest])
end
defp hash_password(changeset) do
if password = get_change(changeset, :password) do
changeset
|> put_change(:password_digest, hashpwsalt(password))
else
changeset
end
end
Inside the test, I have these:
@valid_attrs %{email: "some email", password: "some password", username: "some username"}
def user_fixture(attrs \ %{}) do
{:ok, user} =
attrs
|> Enum.into(@valid_attrs)
|> Accounts.create_user()
user
end
...
test "get_user!/1 returns the user with given id" do
user = user_fixture()
assert Accounts.get_user!(user.id) == user
end
Btw, get_user is straight from generator: def get_user!(id), do: Repo.get!(User, id)
What is the proper way to test virtual field?
testing phoenix-framework
testing phoenix-framework
asked Nov 22 '18 at 16:51
IggyIggy
1,45821944
1,45821944
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
That is an expected behavior because Accounts.get_user!(user.id)
will not fill the virtual attribute. It is only changed on changeset and you are not doing any change.
In this case, I think that what is relevant for you is test if password_digest
was set.
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53435378%2ftesting-virtual-fields-returning-nil-in-phoenix%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
That is an expected behavior because Accounts.get_user!(user.id)
will not fill the virtual attribute. It is only changed on changeset and you are not doing any change.
In this case, I think that what is relevant for you is test if password_digest
was set.
add a comment |
That is an expected behavior because Accounts.get_user!(user.id)
will not fill the virtual attribute. It is only changed on changeset and you are not doing any change.
In this case, I think that what is relevant for you is test if password_digest
was set.
add a comment |
That is an expected behavior because Accounts.get_user!(user.id)
will not fill the virtual attribute. It is only changed on changeset and you are not doing any change.
In this case, I think that what is relevant for you is test if password_digest
was set.
That is an expected behavior because Accounts.get_user!(user.id)
will not fill the virtual attribute. It is only changed on changeset and you are not doing any change.
In this case, I think that what is relevant for you is test if password_digest
was set.
answered Nov 23 '18 at 11:55
Marcos TapajósMarcos Tapajós
1915
1915
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53435378%2ftesting-virtual-fields-returning-nil-in-phoenix%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown