Permalink
Please sign in to comment.
Showing
with
335 additions
and 8 deletions.
- +4 โ1 Gemfile
- +32 โ7 Gemfile.lock
- +14 โ0 spec/app/models/organization_spec.rb
- +36 โ0 spec/app/models/user_spec.rb
- +19 โ0 spec/config/fast_server.cert
- +27 โ0 spec/config/fast_server.key
- +27 โ0 spec/config/lets_encrypt.pem
- +49 โ0 spec/config/postal.yml
- +15 โ0 spec/config/signing.key
- +32 โ0 spec/factories/organization_factory.rb
- +36 โ0 spec/factories/user_factory.rb
- +7 โ0 spec/lib/postal/message_parser_spec.rb
- +26 โ0 spec/rails_helper.rb
- +11 โ0 spec/spec_helper.rb
39
Gemfile.lock
| @@ -0,0 +1,14 @@ | ||
| +require 'rails_helper' | ||
| + | ||
| +describe Organization do | ||
| + | ||
| + context "model" do | ||
| + subject(:organization) { create(:organization) } | ||
| + | ||
| + it "should have a UUID" do | ||
| + expect(organization.uuid).to be_a String | ||
| + expect(organization.uuid.length).to eq 36 | ||
| + end | ||
| + end | ||
| + | ||
| +end |
| @@ -0,0 +1,36 @@ | ||
| +require 'rails_helper' | ||
| + | ||
| +describe User do | ||
| + | ||
| + context "model" do | ||
| + subject(:user) { create(:user) } | ||
| + | ||
| + it "should have a UUID" do | ||
| + expect(user.uuid).to be_a String | ||
| + expect(user.uuid.length).to eq 36 | ||
| + end | ||
| + end | ||
| + | ||
| + context ".authenticate" do | ||
| + it "should not authenticate users with invalid emails" do | ||
| + expect { User.authenticate('nothing@nothing.com', 'hello') }.to raise_error(Postal::Errors::AuthenticationError) do |e| | ||
| + expect(e.error).to eq 'InvalidEmailAddress' | ||
| + end | ||
| + end | ||
| + | ||
| + it "should not authenticate users with invalid passwords" do | ||
| + user = create(:user) | ||
| + expect { User.authenticate(user.email_address, 'hello') }.to raise_error(Postal::Errors::AuthenticationError) do |e| | ||
| + expect(e.error).to eq 'InvalidPassword' | ||
| + end | ||
| + end | ||
| + | ||
| + it "should authenticate valid users" do | ||
| + user = create(:user) | ||
| + auth_user = nil | ||
| + expect { auth_user = User.authenticate(user.email_address, 'passw0rd') }.to_not raise_error | ||
| + expect(auth_user).to eq user | ||
| + end | ||
| + end | ||
| + | ||
| +end |
| @@ -0,0 +1,19 @@ | ||
| +-----BEGIN CERTIFICATE----- | ||
| +MIIC/zCCAeegAwIBAgIBADANBgkqhkiG9w0BAQsFADBDMQswCQYDVQQGEwJHQjEQ | ||
| +MA4GA1UECgwHRGVmYXVsdDEQMA4GA1UECwwHRGVmYXVsdDEQMA4GA1UEAwwHZGVm | ||
| +YXVsdDAeFw0xNzA1MDgxMzM2MDBaFw0yNzA1MDYxMzM2MDBaMEMxCzAJBgNVBAYT | ||
| +AkdCMRAwDgYDVQQKDAdEZWZhdWx0MRAwDgYDVQQLDAdEZWZhdWx0MRAwDgYDVQQD | ||
| +DAdkZWZhdWx0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA18zeoKrM | ||
| +m9dlvu5l3k57ocbtB5PKm1fWcUg6XSl4Wtk+Tf9TQx8wuwjEwRvqGdgP9KWtazdW | ||
| +2eN9z9lmHd3GnC3inmw7UcSkGkeEUQrwbkjihoKAgEpLBNmJoaMWatbdvcgkBvKs | ||
| +WUg8J4g7yRdX5jWGa0f9Ok0jfYYNQwPZ1iugD9ayBcovvvCX3Xm2oeKCjBeqjejS | ||
| +wlv1KdYmHQ2AduIx/s9+vxdWtnllqbJ+v60+WqVzwxxJWE4P+kJb+vNbgZ01xFGX | ||
| +vljT/DzosDVR4OYBI5IumOYwuDz91FY/K9Yi+7QKfI7tq7y9ZKYJQSqZxpnOw2gn | ||
| +qZuC/ReCBw/wlwIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQDHEE35sCpFivcVFoVC | ||
| +Y7q7u2PhHofjhi1pqPRnZOtiVIYr9xXAe+pTlcv+K9Kc0IenaADEnra0wM0i5imp | ||
| +b3ObQ0CyRCyKKVbU8t74RYo6K3klZnru61YWte0MdsBFYwYTSAZzK9l+5EICyX1l | ||
| +KYcXIGgdZJddU7GQ4EASh1BTB7qDQ7GOQRlY1uTyVd+74WdfUez8A6FgRGnx/RRD | ||
| +0u/l+K8+JIaqgSU1+ZlxPw+KpHUPJhoTikZapyKgaINBoLfyuVd4svf4HsJzjwcj | ||
| +w8CL5sPAdN8iLeDVkHemX/Tcl4CdWVBodb3Wiqcq7DgTVY2alDNMjCo9YvzuAPVL | ||
| +99W3 | ||
| +-----END CERTIFICATE----- |
| @@ -0,0 +1,27 @@ | ||
| +-----BEGIN RSA PRIVATE KEY----- | ||
| +MIIEogIBAAKCAQEA18zeoKrMm9dlvu5l3k57ocbtB5PKm1fWcUg6XSl4Wtk+Tf9T | ||
| +Qx8wuwjEwRvqGdgP9KWtazdW2eN9z9lmHd3GnC3inmw7UcSkGkeEUQrwbkjihoKA | ||
| +gEpLBNmJoaMWatbdvcgkBvKsWUg8J4g7yRdX5jWGa0f9Ok0jfYYNQwPZ1iugD9ay | ||
| +BcovvvCX3Xm2oeKCjBeqjejSwlv1KdYmHQ2AduIx/s9+vxdWtnllqbJ+v60+WqVz | ||
| +wxxJWE4P+kJb+vNbgZ01xFGXvljT/DzosDVR4OYBI5IumOYwuDz91FY/K9Yi+7QK | ||
| +fI7tq7y9ZKYJQSqZxpnOw2gnqZuC/ReCBw/wlwIDAQABAoIBADj2T/GTBA1Czw2V | ||
| ++fezObkbPCfa4AkfJ3Chgx5iOu2oGGUYN08pZYCJMP5UMvf9a0DFlsANTHSZMvVx | ||
| +Sh4qEynYhtAQe5v6zuJM7GVEAPDrdjfRLMAwXBr8nPK4jMtIyiE1OiVHWyz5/z7k | ||
| +G/vZmI8go8mfp/0CrZKNluSQmKiKQPS1rkDXiVBkF7ifFO6j34IjnihgWsc2W/CL | ||
| +Wvehfe6RmCK+KfEDREpTSw2/VFuqn4j2FYK8PpweAAJwVWtGGuDB9QSPkKT8WSgK | ||
| +yZFVW3d+aouBfduHKcja/ccmrGhmBhni80lTjUxakzK7Hw4SKmNTV1FPNfJsE1ez | ||
| +zPqs8tkCgYEA/a0yBSFuwaLGuwpmchjH32bcq+TR7qNaCAfv07pL7aQXd7nSjDuU | ||
| +Lz/ohveubizhdsl32kJQBuPNuYeLXxhsulxCumS3tfN31/J4IYU2BXNB20mhKSkP | ||
| +APneQfc5SS2T3cOdd5hUgsFlSAU2KtWC/qSrXSpR0kEyCGLbOrctJnUCgYEA2cbd | ||
| +R8QOFzMBpz5Dl3DtFc3qzAyw2lS1m6Nlus3zMxNwX0Diaw9eyiZKOxjNBwN8uQa6 | ||
| +hOf944go2MmEmdRILWiV7lXt1ML5/fD/Kf2n15TI+xl4maETNGtxPMlZs158xsRR | ||
| +g4qUvRufZp03V3Cu1e9HrypElw9D6K1lv7DvkVsCgYAvxM53gt0tX26WyBWUhLAW | ||
| +lHMXd2ZEzsPkYUI7F4i2vkChDf/k4k88OoeZ6sgQ/SiTyspj8jrJoVobBrgq9xl6 | ||
| +WmdCXDbv72Hw6zrN7RzIF/Udyxaq/o1RvLuqplhGPGvsxapAXBIF8U8WKc0ScdRS | ||
| +CUYvrAluU1KNm7f2rYm2BQKBgEEliUqPrrtn6cWzDZs/D91m9SdHYJxfnNhLQAJq | ||
| +26ba2NHV4iWuumd0nt4g5CyF8YiUJ7XchInNUJLRbdZqt5DF6ZwbnoL4NLqvnlVc | ||
| +aRpHivv6uaYTlmAnB//sJ+ZNjLwVPGFCUo5jtgKHY2fH8LVU2DfhSBV8Xo87V+XJ | ||
| +M1FjAoGAEIkg3M/rRku0SMaT0LofchABhW1RXYwBUqUsb4TUF2fdm5iESRg1wP2g | ||
| +kvMe6394KFseK4/OG2SZf69bMeUbdwi+LA8krIKj4CFhgjdG0Xs4j/POWqCExNDC | ||
| +pAwJbJcn3o/RSGwIl4fO0o0JwJe8//269pklRQ5CrZt3+LSxy/E= | ||
| +-----END RSA PRIVATE KEY----- |
| @@ -0,0 +1,27 @@ | ||
| +-----BEGIN RSA PRIVATE KEY----- | ||
| +MIIEpAIBAAKCAQEAvbtEZ/TZPqMZmbNJH8trasoYkuzkLSsiGBAmKWDw/V3xVkMX | ||
| +JSY+MYRv6NlKKXZg6SYoZVU8DvxCvUQstJDU+CYHUfQtBthQaWGzh5XdAmjTtb+6 | ||
| +UTyI5UtrwbzWHPgUrwHtN/QpBGsan6A2ASbP5R+HxuUTjzvkMc6otyvdjO+86jSt | ||
| +mFxGoJXmQSyyGATjMBnhTCPUNjqOI13qgwWgh0beCY2+m78URbJ60NHg+UOBOIUx | ||
| +Z1e0jY0YCRxb+CuTiBgbBCS3JNlze7JTwLXDgXunV2OPUBA5qd2+4eGsaSzeGxMi | ||
| +HZaat/Pcn11PEZBEYMuEr2bGb9ANxSzzN4+NKwIDAQABAoIBAQCTH1qdDfVDp++b | ||
| +CrZCTFfgOBQ0IjORfufyJtugrIZSwfz5Og8BhJUnip3Ivm3Olvfw8uDSKvTmXeBW | ||
| +qT3NSp2KStrURvZ/X0+DV/qBwcjeLHE2dxTAF6PDwecuFQMm9Yv8ZQ8Qm2kO/wpn | ||
| +CzG1VOZSsk90AIBZSkTaBnk3iHFE7e66Ru3AVNdFOkn45W459IeZRsh7FnrLG4r4 | ||
| +3ko/07+e1Eb82mgnan3iyMrHYW+PACzcP/GjIJ2Xh3e39IexXeEsp8qkAbUsv0xx | ||
| +lt1QL22Xi6gRc2GMv+GNIi84FfnJ6P/ju3dVuHiShFncM2zM5cc9snOHaayePyT6 | ||
| +HVVySp0JAoGBAPDJmdd/01W91KcmzZ59N7+uhSMhfvxvZE/fpq1dEwtTIREUW6sL | ||
| +J7yfJA9KSm+SsOpy6NOG/caWACz+lPZX67Ju4eIO6aiIV5Tj3g8SvdMNvj4a6gfz | ||
| +lMg7eDtiuk4AeFQroPqmo+IPMd2ia4N6OOIOt5XzaoTHl7wdIrMTFbb/AoGBAMm3 | ||
| +6E7DMR/dcUpe9bOrOtPA8MtGVxhMhR6AR7fpQtFRcjmpOnQnio5EASvOM4tAN/H0 | ||
| +DB5tyuQ9JzHmvH5tENdwXZLnPBvnKl4OobZqaX7SWQA1inb71fr1pjp8rzceABjZ | ||
| +pFJ3/esN5VJw+f3DTjw8HbBkHZBtvbNNPin/5LXVAoGBAKq698dSjoHcQR1oKSG4 | ||
| +vb+/Og3H4WeSgDkWZvPD7A36mpamrbzhAwL+gC4LSi5EgActBSN/MxANKgC9Xtgx | ||
| +TSFO+AE2+7yRODCNRdXAPzKYKw2UPd73esZjTIQnI9zM/oUIDnPLlqZiicQSN1OZ | ||
| +ZR38u3WqjBur/k3XBtScsqf3AoGAGA3VJudByWH3q32tYPJvPmcIj8Tgh+ZADYYQ | ||
| +h07Kh/llXJjgfo9kh1h2p0mcfeN3iGOoukwvYI4mSV4RZiYNVxNwJR9r3IvxUmv+ | ||
| +Pqlr0RK2SD8aNtwLBTUb0Gej4TeznUL+xFLItanfibgtJ2SNxMMKa0lU+S8M6v+w | ||
| +BQQdus0CgYBu+21HRlcgTr47TtNlCUP1fCPgkpJXj72P8WBVvJnVi8JjIX++PtcR | ||
| +QwxJpPxX9MsQiD/2oziEb/pXDrNytuezDwGsNrRmrVpgorL3lXaLi571AjY7urrq | ||
| +/0ZT4OPIP+Em1F9ugh+u/XxOedLwmcwzz3VmKCYfSJzcQQ3jU8njjA== | ||
| +-----END RSA PRIVATE KEY----- |
| @@ -0,0 +1,49 @@ | ||
| +web: | ||
| + host: postal.example.com | ||
| + protocol: https | ||
| + | ||
| +fast_server: | ||
| + enabled: false | ||
| + bind_address: | ||
| + | ||
| +general: | ||
| + use_ip_pools: false | ||
| + | ||
| +main_db: | ||
| + host: 127.0.0.1 | ||
| + username: root | ||
| + password: | ||
| + database: postal_test | ||
| + | ||
| +message_db: | ||
| + host: 127.0.0.1 | ||
| + username: root | ||
| + password: | ||
| + prefix: postal_test | ||
| + | ||
| +rabbitmq: | ||
| + host: 127.0.0.1 | ||
| + username: guest | ||
| + password: guest | ||
| + vhost: | ||
| + | ||
| +dns: | ||
| + mx_records: | ||
| + - mx.postal.example.com | ||
| + smtp_server_hostname: postal.example.com | ||
| + spf_include: spf.postal.example.com | ||
| + return_path: rp.postal.example.com | ||
| + route_domain: routes.postal.example.com | ||
| + track_domain: track.postal.example.com | ||
| + | ||
| +smtp: | ||
| + host: 127.0.0.1 | ||
| + port: 2525 | ||
| + username: | ||
| + password: | ||
| + from_name: Postal | ||
| + from_address: postal@yourdomain.com | ||
| + | ||
| +rails: | ||
| + environment: test | ||
| + secret_key: c3ed0d4723a5d08f8cdb03571ddec8366da74db114f5419187343632e9c0c0110da177c0cf79e6605a4ccfff6f2d9e716d99b6525401ad9c181466b57a1901ffeacb023d05c9ce69838dd826f54e29c846e9e3231697c6749648a9c706df20b50bec1d7ef81b0dbd91410b314c44a4c0cf74741df2de9f5bb144026a6f99954c |
| @@ -0,0 +1,15 @@ | ||
| +-----BEGIN RSA PRIVATE KEY----- | ||
| +MIICXgIBAAKBgQC/Af1LGsg/xdpdLjIaxVhQm3qjKNrWQh+divUV9eLCFta/s5Qs | ||
| +Axs2+jf40IjpORn9507mtFwNPcauNyfUH7/bNxfAb65L3c2GWxVu/Cp4tg9yYVpz | ||
| +9vvNEsQh/AWrhjrFcc1DpyWUFeY80ASBHGAJQe1y+iFMQVQAJzXcyUNwJwIDAQAB | ||
| +AoGAMcDj6J9WT/5KjgENfhmvknedb0iiEDNzJsdeZdUBtwrZ719oljpM6XouADrZ | ||
| +nt6H3bJVxBRw8eYIjbLCRifrAkv0dmFOPbrZBd8q7bFSRlyc5OeD6aKLW95szrpx | ||
| +AnAEPb1ojfvOAyAA2407GZjuPQrRjncT1tZx56xwIU2n0DECQQD6b1wtad+akE0k | ||
| +ry54Wd/iaaM/pguh2dUyphDrCKzQ3fFeLw0WPe/j+f5hLcXaWNJWiOwa+MPUpEnE | ||
| +B1SCA7O/AkEAw0CRZp+smFD2clPDiGtNbXW1ZF2TzLZhHzntYv3KpCqzJna8vx+I | ||
| +gwXCUrnleMRJdDV+mWvlptDDJOAi2Oe9mQJBAMjTwpyceXbOXz6ayO40TGiZhBNH | ||
| +ia56LBDYwVppc4RvZt67Zog+lQBB+q9dcHtfnRVN6eDbOtdsA8eShT9ZzqsCQQCe | ||
| +uTJ6FnucJtTxA58EmxYKUZHv0RKBbBFv7QtJWb8NzZhtQEEXrW6v9FKQJYahsg90 | ||
| +ZLhRyCCch0DcDUjGwzyhAkEAh8CC37iLLBCHpxxrsQ/l+/c9TX0c+PbcZSRrZ54X | ||
| +l3yZis66MmhaOaeKVQ7rY+hS9/v+PHBY4HCpCkqjYV/bIQ== | ||
| +-----END RSA PRIVATE KEY----- |
| @@ -0,0 +1,32 @@ | ||
| +# == Schema Information | ||
| +# | ||
| +# Table name: organizations | ||
| +# | ||
| +# id :integer not null, primary key | ||
| +# uuid :string(255) | ||
| +# name :string(255) | ||
| +# permalink :string(255) | ||
| +# time_zone :string(255) | ||
| +# created_at :datetime | ||
| +# updated_at :datetime | ||
| +# ip_pool_id :integer | ||
| +# owner_id :integer | ||
| +# deleted_at :datetime | ||
| +# suspended_at :datetime | ||
| +# suspension_reason :string(255) | ||
| +# | ||
| +# Indexes | ||
| +# | ||
| +# index_organizations_on_permalink (permalink) | ||
| +# index_organizations_on_uuid (uuid) | ||
| +# | ||
| + | ||
| +FactoryGirl.define do | ||
| + | ||
| + factory :organization do | ||
| + name "Acme Inc" | ||
| + sequence(:permalink) { |n| "org#{n}" } | ||
| + association :owner, :factory => :user | ||
| + end | ||
| + | ||
| +end |
| @@ -0,0 +1,36 @@ | ||
| +# == Schema Information | ||
| +# | ||
| +# Table name: users | ||
| +# | ||
| +# id :integer not null, primary key | ||
| +# uuid :string(255) | ||
| +# first_name :string(255) | ||
| +# last_name :string(255) | ||
| +# email_address :string(255) | ||
| +# password_digest :string(255) | ||
| +# time_zone :string(255) | ||
| +# email_verification_token :string(255) | ||
| +# email_verified_at :datetime | ||
| +# created_at :datetime | ||
| +# updated_at :datetime | ||
| +# password_reset_token :string(255) | ||
| +# password_reset_token_valid_until :datetime | ||
| +# admin :boolean default(FALSE) | ||
| +# | ||
| +# Indexes | ||
| +# | ||
| +# index_users_on_email_address (email_address) | ||
| +# index_users_on_uuid (uuid) | ||
| +# | ||
| + | ||
| +FactoryGirl.define do | ||
| + | ||
| + factory :user do | ||
| + first_name "John" | ||
| + last_name "Doe" | ||
| + password "passw0rd" | ||
| + email_verified_at Time.now | ||
| + sequence(:email_address) { |n| "user#{n}@example.com" } | ||
| + end | ||
| + | ||
| +end |
| @@ -0,0 +1,7 @@ | ||
| +require 'rails_helper' | ||
| + | ||
| +describe Postal::MessageParser do | ||
| + it "should be true" do | ||
| + expect(Rails.env).to eq 'test' | ||
| + end | ||
| +end |
| @@ -0,0 +1,26 @@ | ||
| +ENV['POSTAL_CONFIG_ROOT'] = File.expand_path('../config', __FILE__) | ||
| + | ||
| +require File.expand_path('../../config/environment', __FILE__) | ||
| +require 'rspec/rails' | ||
| +require 'spec_helper' | ||
| +require 'factory_girl' | ||
| +require 'database_cleaner' | ||
| + | ||
| +FACTORIES_EXCLUDED_FROM_LINT = [] | ||
| +Dir[File.expand_path('../factories/*.rb', __FILE__)].each { |f| require f } | ||
| + | ||
| +ActiveRecord::Migration.maintain_test_schema! | ||
| +RSpec.configure do |config| | ||
| + config.use_transactional_fixtures = true | ||
| + config.infer_spec_type_from_file_location! | ||
| + config.include FactoryGirl::Syntax::Methods | ||
| + | ||
| + config.before(:suite) do | ||
| + begin | ||
| + DatabaseCleaner.start | ||
| + FactoryGirl.lint(FactoryGirl.factories.select { |f| !FACTORIES_EXCLUDED_FROM_LINT.include?(f.name.to_sym) }) | ||
| + ensure | ||
| + DatabaseCleaner.clean | ||
| + end | ||
| + end | ||
| +end |
Oops, something went wrong.
0 comments on commit
2bde757