Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions app/lib/commands/contacts/create/build.liquid
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
{% parse_json contact %}
{
"email": {{ object.email | downcase | json }},
"email": {{ object.email | strip | downcase | json }},
"body": {{ object.body | json }}
}
{% endparse_json %}

{% liquid
return contact
%}
%}

27 changes: 27 additions & 0 deletions app/lib/tests/contact_create_happy_path_test.liquid
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
{% comment %}
Test: Valid input - should be considered valid
{% endcomment %}

{% liquid
assign data = '{ "email": "USER@example.com", "body": "This is a valid message body." }' | parse_json
function contact = 'commands/contacts/create', object: data

# 1. Contact should be valid
function contract = 'modules/tests/assertions/valid_object', contract: contract, object: contact, field_name: 'contact'

# 2. Email should be downcased
assign expected_email = 'user@example.com'
assign given_email = contact.email
function contract = 'modules/tests/assertions/equal', contract: contract, expected: expected_email, given: given_email, field_name: 'contact.email'

# 3. Body should match
assign expected_body = 'This is a valid message body.'
assign given_body = contact.body
function contract = 'modules/tests/assertions/equal', contract: contract, expected: expected_body, given: given_body, field_name: 'contact.body'

# 4: Assert the contact.valid is true
function contract = 'modules/tests/assertions/true', contract: contract, object: contact, field_name: 'valid'

# 5: Errors should be blank
function contract = 'modules/tests/assertions/blank', contract: contract, object: contact, field_name: 'errors'
%}
97 changes: 97 additions & 0 deletions app/lib/tests/contact_create_negative_path_test.liquid
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
{% comment %}
Test: Invalid email - should be invalid
{% endcomment %}
{% liquid
assign data = '{ "email": "invalid-email", "body": "This is a valid message body." }' | parse_json
function contact = 'commands/contacts/create', object: data

function contract = 'modules/tests/assertions/not_valid_object', contract: contract, object: contact, field_name: 'contact'
function contract = 'modules/tests/assertions/presence', contract: contract, object: contact.errors, field_name: 'email'
%}

{% comment %}
Test: Too short body - should be invalid
{% endcomment %}
{% liquid
assign data = '{ "email": "user@example.com", "body": "Short" }' | parse_json
function contact = 'commands/contacts/create', object: data

function contract = 'modules/tests/assertions/not_valid_object', contract: contract, object: contact, field_name: 'contact'
function contract = 'modules/tests/assertions/presence', contract: contract, object: contact.errors, field_name: 'body'
%}

{% comment %}
Test: Too long body – should be invalid
{% endcomment %}

{% parse_json data %}
{
"email": "user@example.com",
"body": "{{ 201 | random_string }}"
}
{% endparse_json %}

{% liquid
function contact = 'commands/contacts/create', object: data

function contract = 'modules/tests/assertions/not_valid_object', contract: contract, object: contact, field_name: 'contact'
function contract = 'modules/tests/assertions/presence', contract: contract, object: contact.errors, field_name: 'body'
%}

{% comment %}
Test: Blank email and body - should be invalid
{% endcomment %}
{% liquid
assign data = '{ "email": "", "body": "" }' | parse_json
function contact = 'commands/contacts/create', object: data

function contract = 'modules/tests/assertions/not_valid_object', contract: contract, object: contact, field_name: 'contact'
function contract = 'modules/tests/assertions/presence', contract: contract, object: contact.errors, field_name: 'email'
function contract = 'modules/tests/assertions/presence', contract: contract, object: contact.errors, field_name: 'body'
%}

{% comment %}
Test: Body is missing (null) – should fail validation
{% endcomment %}
{% liquid
assign data = '{ "email": "user@example.com" }' | parse_json
function contact = 'commands/contacts/create', object: data

function contract = 'modules/tests/assertions/not_valid_object', contract: contract, object: contact, field_name: 'contact'
function contract = 'modules/tests/assertions/presence', contract: contract, object: contact.errors, field_name: 'body'
%}

{% comment %}
Test: Email missing from object – should fail validation
{% endcomment %}
{% liquid
assign data = '{ "body": "This is valid" }' | parse_json
function contact = 'commands/contacts/create', object: data

function contract = 'modules/tests/assertions/not_valid_object', contract: contract, object: contact, field_name: 'contact'
function contract = 'modules/tests/assertions/presence', contract: contract, object: contact.errors, field_name: 'email'
%}

{% comment %}
Test: Completely empty object – both fields invalid
{% endcomment %}
{% liquid
assign data = '{}' | parse_json
function contact = 'commands/contacts/create', object: data

function contract = 'modules/tests/assertions/not_valid_object', contract: contract, object: contact, field_name: 'contact'
function contract = 'modules/tests/assertions/presence', contract: contract, object: contact.errors, field_name: 'email'
function contract = 'modules/tests/assertions/presence', contract: contract, object: contact.errors, field_name: 'body'
%}

{% comment %}
Test: Email with upper case letters and leading/trailing spaces
{% endcomment %}
{% liquid
assign data = '{ "email": " User@examplE.com ", "body": "Nice body here" }' | parse_json
function contact = 'commands/contacts/create/build', object: data

if contact.email != 'user@example.com'
function contract = 'modules/tests/helpers/register_error', contract: contract, field_name: 'email', message: 'Email was not trimmed or downcased'
endif
%}
Loading