tddium-preview 0.7.4 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Gemfile.lock +1 -1
- data/features/account_command.feature +67 -0
- data/features/login_command.feature +5 -9
- data/features/step_definitions/account_steps.rb +24 -0
- data/features/step_definitions/login_steps.rb +9 -0
- data/features/step_definitions/mimic_steps.rb +1 -1
- data/features/suite_command.feature +4 -4
- data/features/support/constants.rb +1 -0
- data/features/support/mimic.rb +1 -0
- data/lib/tddium.rb +41 -1
- data/lib/tddium/constant.rb +8 -1
- data/lib/tddium/version.rb +1 -1
- metadata +4 -2
    
        data/Gemfile.lock
    CHANGED
    
    
| @@ -0,0 +1,67 @@ | |
| 1 | 
            +
            @mimic
         | 
| 2 | 
            +
            Feature: Account command
         | 
| 3 | 
            +
              As a Tddium user
         | 
| 4 | 
            +
              In order to use Tddium in my organization
         | 
| 5 | 
            +
              I want to be able to see billing info and control who has access to my account
         | 
| 6 | 
            +
             | 
| 7 | 
            +
              Background:
         | 
| 8 | 
            +
                Given the user has the following memberships in his account:
         | 
| 9 | 
            +
                  | id | role    | email               | display                 |
         | 
| 10 | 
            +
                  | 1  | member  | member@example.com  | [member] member@example.com |
         | 
| 11 | 
            +
                  | 2  | admin   | admin@example.com   | [admin]  admin@example.com  |
         | 
| 12 | 
            +
                  | 3  | owner   | owner@example.com   | [owner]  owner@example.com |
         | 
| 13 | 
            +
                  | 4  | admin   | someone@example.com | [admin]  someone@example.com  |
         | 
| 14 | 
            +
             | 
| 15 | 
            +
              Scenario: Display account information
         | 
| 16 | 
            +
                Given the user is logged in
         | 
| 17 | 
            +
                And the user has a suite for "alpha" on "master"
         | 
| 18 | 
            +
                When I run `tddium account`
         | 
| 19 | 
            +
                Then the output should contain "someone@example.com"
         | 
| 20 | 
            +
                And the output should contain:
         | 
| 21 | 
            +
                """
         | 
| 22 | 
            +
                [member] member@example.com
         | 
| 23 | 
            +
                [admin]  admin@example.com
         | 
| 24 | 
            +
                """
         | 
| 25 | 
            +
             | 
| 26 | 
            +
              Scenario: Add member to account successfully
         | 
| 27 | 
            +
                Given the user is logged in
         | 
| 28 | 
            +
                And adding a member to the account will succeed
         | 
| 29 | 
            +
                When I successfully run `tddium account:add member member2@example.com`
         | 
| 30 | 
            +
                Then the output should contain "Added member2@example.com"
         | 
| 31 | 
            +
             | 
| 32 | 
            +
              Scenario: Add member to account unsuccessfully
         | 
| 33 | 
            +
                Given the user is logged in
         | 
| 34 | 
            +
                And adding a member to the account will fail with error "add member error"
         | 
| 35 | 
            +
                When I run `tddium account:add member member@example.com`
         | 
| 36 | 
            +
                Then the output should not contain "Added member@example.com"
         | 
| 37 | 
            +
                And the output should contain "add member error"
         | 
| 38 | 
            +
                And the exit status should not be 0
         | 
| 39 | 
            +
             | 
| 40 | 
            +
              Scenario: Fail to add to account when not logged in
         | 
| 41 | 
            +
                When I run `tddium account:add member member@example.com`
         | 
| 42 | 
            +
                Then it should fail with:
         | 
| 43 | 
            +
                """
         | 
| 44 | 
            +
                tddium must be initialized. Try 'tddium login'
         | 
| 45 | 
            +
                """
         | 
| 46 | 
            +
             | 
| 47 | 
            +
              Scenario: Remove member from account successfully
         | 
| 48 | 
            +
                Given the user is logged in
         | 
| 49 | 
            +
                And removing "member@example.com" from the account will succeed
         | 
| 50 | 
            +
                When I successfully run `tddium account:remove member@example.com`
         | 
| 51 | 
            +
                Then the output should contain "Removed member@example.com"
         | 
| 52 | 
            +
             | 
| 53 | 
            +
              Scenario: Remove member to account unsuccessfully
         | 
| 54 | 
            +
                Given the user is logged in
         | 
| 55 | 
            +
                And removing "member@example.com" from the account will fail with error "remove member error"
         | 
| 56 | 
            +
                When I run `tddium account:remove member@example.com`
         | 
| 57 | 
            +
                Then the output should not contain "Removed member@example.com"
         | 
| 58 | 
            +
                And the output should contain "remove member error"
         | 
| 59 | 
            +
                And the exit status should not be 0
         | 
| 60 | 
            +
             | 
| 61 | 
            +
              Scenario: Fail to remove from account when not logged in
         | 
| 62 | 
            +
                When I run `tddium account:remove member@example.com`
         | 
| 63 | 
            +
                Then it should fail with:
         | 
| 64 | 
            +
                """
         | 
| 65 | 
            +
                tddium must be initialized. Try 'tddium login'
         | 
| 66 | 
            +
                """
         | 
| 67 | 
            +
             | 
| @@ -3,7 +3,7 @@ Feature: Login command | |
| 3 3 |  | 
| 4 4 | 
             
              Scenario: Interactively log in successfully
         | 
| 5 5 | 
             
                Given the user can log in and gets API key "apikey"
         | 
| 6 | 
            -
                When I run `tddium login | 
| 6 | 
            +
                When I run `tddium login` interactively
         | 
| 7 7 | 
             
                And I type "foo@example.com"
         | 
| 8 8 | 
             
                And I type "barbarbar"
         | 
| 9 9 | 
             
                And the console session ends
         | 
| @@ -12,25 +12,21 @@ Feature: Login command | |
| 12 12 | 
             
                Logged in successfully
         | 
| 13 13 | 
             
                """
         | 
| 14 14 | 
             
                And the exit status should be 0
         | 
| 15 | 
            -
                And  | 
| 16 | 
            -
                And the file ".gitignore" should contain ".tddium.mimic"
         | 
| 17 | 
            -
                And the file ".gitignore" should contain ".tddium-deploy-key.mimic"
         | 
| 15 | 
            +
                And dotfiles should be updated
         | 
| 18 16 |  | 
| 19 17 | 
             
              Scenario: Non-interactively log in successfully
         | 
| 20 18 | 
             
                Given the user can log in and gets API key "apikey"
         | 
| 21 | 
            -
                When I run `tddium login -- | 
| 19 | 
            +
                When I run `tddium login --email=foo@example.com --password=barbarbar`
         | 
| 22 20 | 
             
                Then the output should contain:
         | 
| 23 21 | 
             
                """
         | 
| 24 22 | 
             
                Logged in successfully
         | 
| 25 23 | 
             
                """
         | 
| 26 24 | 
             
                And the exit status should be 0
         | 
| 27 | 
            -
                And  | 
| 28 | 
            -
                And the file ".gitignore" should contain ".tddium.mimic"
         | 
| 29 | 
            -
                And the file ".gitignore" should contain ".tddium-deploy-key.mimic"
         | 
| 25 | 
            +
                And dotfiles should be updated
         | 
| 30 26 |  | 
| 31 27 | 
             
              Scenario: Non-interactively log in unsuccessfully
         | 
| 32 28 | 
             
                Given the user cannot log in
         | 
| 33 | 
            -
                When I run `tddium login -- | 
| 29 | 
            +
                When I run `tddium login --email=foo@example.com --password=barbarbar`
         | 
| 34 30 | 
             
                Then the output should contain:
         | 
| 35 31 | 
             
                """
         | 
| 36 32 | 
             
                Access Denied
         | 
| @@ -0,0 +1,24 @@ | |
| 1 | 
            +
            Given /^the user has the following memberships in his account:$/ do |table|
         | 
| 2 | 
            +
              MimicServer.server.install(:get, "/1/memberships", {:status=>0, :memberships=>table.hashes})
         | 
| 3 | 
            +
              @memberships = {}
         | 
| 4 | 
            +
              table.hashes.each do |row|
         | 
| 5 | 
            +
                @memberships[row['email']]=row
         | 
| 6 | 
            +
              end
         | 
| 7 | 
            +
            end
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            Given /^adding a member to the account will succeed$/ do
         | 
| 10 | 
            +
              MimicServer.server.install(:post, "/1/memberships", {:status=>0}, :code=>201)
         | 
| 11 | 
            +
            end
         | 
| 12 | 
            +
             | 
| 13 | 
            +
            Given /^adding a member to the account will fail with error "([^"]*)"$/ do |error|
         | 
| 14 | 
            +
              MimicServer.server.install(:post, "/1/memberships", {:status=>1, :explanation=>error}, :code=>409)
         | 
| 15 | 
            +
            end
         | 
| 16 | 
            +
             | 
| 17 | 
            +
            Given /^removing "([^"]*)" from the account will succeed$/ do |member|
         | 
| 18 | 
            +
              MimicServer.server.install(:delete, "/1/memberships/#{member}", {:status=>0}, :code=>200)
         | 
| 19 | 
            +
            end
         | 
| 20 | 
            +
             | 
| 21 | 
            +
            Given /^removing "([^"]*)" from the account will fail with error "([^"]*)"$/ do |member, error|
         | 
| 22 | 
            +
              MimicServer.server.install(:delete, "/1/memberships/#{member}", {:status=>1, :explanation=>error}, :code=>409)
         | 
| 23 | 
            +
            end
         | 
| 24 | 
            +
             | 
| @@ -1,5 +1,7 @@ | |
| 1 1 | 
             
            Given /^the user is logged in$/ do
         | 
| 2 2 | 
             
              @api_key = "abcdef"
         | 
| 3 | 
            +
              MimicServer.server.install(:get, "/1/users", SAMPLE_USER_RESPONSE)
         | 
| 4 | 
            +
              MimicServer.server.install(:get, "/1/accounts/usage", SAMPLE_ACCOUNT_USAGE)
         | 
| 3 5 | 
             
              steps %Q{
         | 
| 4 6 | 
             
                Given a file named ".tddium.mimic" with:
         | 
| 5 7 | 
             
                """
         | 
| @@ -16,3 +18,10 @@ Given /^the user cannot log in$/ do | |
| 16 18 | 
             
              MimicServer.server.install(:post, "/1/users/sign_in", {:status=>1, :explanation=>"Access Denied."}, :code=>403)
         | 
| 17 19 | 
             
            end
         | 
| 18 20 |  | 
| 21 | 
            +
            Then /^dotfiles should be updated$/ do
         | 
| 22 | 
            +
              steps %Q{
         | 
| 23 | 
            +
                And the file ".tddium.mimic" should contain "apikey"
         | 
| 24 | 
            +
                And the file ".gitignore" should contain ".tddium.mimic"
         | 
| 25 | 
            +
                And the file ".gitignore" should contain ".tddium-deploy-key.mimic"
         | 
| 26 | 
            +
              }
         | 
| 27 | 
            +
            end
         | 
| @@ -1,6 +1,6 @@ | |
| 1 1 | 
             
            When /^I respond to "([^"]*)" with "([^"]*)"$/ do |expect, response|
         | 
| 2 2 | 
             
              steps %Q{
         | 
| 3 | 
            -
                Then the output from "tddium suite | 
| 3 | 
            +
                Then the output from "tddium suite" should contain "#{expect}"
         | 
| 4 4 | 
             
                When I type "#{response}"
         | 
| 5 5 | 
             
              }
         | 
| 6 6 | 
             
            end
         | 
| @@ -10,15 +10,15 @@ Feature: suite command | |
| 10 10 | 
             
                And the user is logged in
         | 
| 11 11 | 
             
                And the user has no suites
         | 
| 12 12 | 
             
                And the user can create a suite named "beta" on branch "test/foobar"
         | 
| 13 | 
            -
                When I run `tddium suite | 
| 13 | 
            +
                When I run `tddium suite` interactively
         | 
| 14 14 | 
             
                And I respond to "repo name" with "beta"
         | 
| 15 | 
            -
                Then the output from "tddium suite | 
| 15 | 
            +
                Then the output from "tddium suite" should contain "Detected branch test/foobar"
         | 
| 16 16 | 
             
                And I respond to "test pattern" with ""
         | 
| 17 17 | 
             
                And I respond to "URL to pull from" with "disable"
         | 
| 18 18 | 
             
                And I respond to "URL to push to" with "disable"
         | 
| 19 19 | 
             
                And I respond to "Campfire subdomain" with "disable"
         | 
| 20 | 
            -
                Then the output from "tddium suite | 
| 21 | 
            -
                 And the output from "tddium suite | 
| 20 | 
            +
                Then the output from "tddium suite" should contain "Pushing changes to Tddium..."
         | 
| 21 | 
            +
                 And the output from "tddium suite" should contain "Created suite..."
         | 
| 22 22 | 
             
                When the console session ends
         | 
| 23 23 | 
             
                Then the exit status should be 0
         | 
| 24 24 |  | 
    
        data/features/support/mimic.rb
    CHANGED
    
    
    
        data/lib/tddium.rb
    CHANGED
    
    | @@ -93,6 +93,39 @@ class Tddium < Thor | |
| 93 93 | 
             
                end
         | 
| 94 94 | 
             
              end
         | 
| 95 95 |  | 
| 96 | 
            +
              desc "account:add [ROLE] [EMAIL]", "Authorize and invite a user to use your account"
         | 
| 97 | 
            +
              define_method "account:add" do |role, email|
         | 
| 98 | 
            +
                set_shell
         | 
| 99 | 
            +
                set_default_environment
         | 
| 100 | 
            +
                user_details = user_logged_in?(true, true)
         | 
| 101 | 
            +
                exit_failure unless user_details
         | 
| 102 | 
            +
             | 
| 103 | 
            +
                params = {:role=>role, :email=>email}
         | 
| 104 | 
            +
                begin
         | 
| 105 | 
            +
                  say Text::Process::ADDING_MEMBER % params
         | 
| 106 | 
            +
                  result = call_api(:post, Api::Path::MEMBERSHIPS, params)
         | 
| 107 | 
            +
                  say Text::Process::ADDED_MEMBER % email
         | 
| 108 | 
            +
                rescue TddiumClient::Error::API => e
         | 
| 109 | 
            +
                  exit_failure Text::Error::ADD_MEMBER_ERROR % [email, e.message]
         | 
| 110 | 
            +
                end
         | 
| 111 | 
            +
              end
         | 
| 112 | 
            +
             | 
| 113 | 
            +
              desc "account:remove [EMAIL]", "Remove a user from your account"
         | 
| 114 | 
            +
              define_method "account:remove" do |email|
         | 
| 115 | 
            +
                set_shell
         | 
| 116 | 
            +
                set_default_environment
         | 
| 117 | 
            +
                user_details = user_logged_in?(true, true)
         | 
| 118 | 
            +
                exit_failure unless user_details
         | 
| 119 | 
            +
             | 
| 120 | 
            +
                begin
         | 
| 121 | 
            +
                  say Text::Process::REMOVING_MEMBER % email
         | 
| 122 | 
            +
                  result = call_api(:delete, "#{Api::Path::MEMBERSHIPS}/#{email}")
         | 
| 123 | 
            +
                  say Text::Process::REMOVED_MEMBER % email
         | 
| 124 | 
            +
                rescue TddiumClient::Error::API => e
         | 
| 125 | 
            +
                  exit_failure Text::Error::REMOVE_MEMBER_ERROR % [email, e.message]
         | 
| 126 | 
            +
                end
         | 
| 127 | 
            +
              end
         | 
| 128 | 
            +
             | 
| 96 129 | 
             
              desc "heroku", "Connect Heroku account with Tddium"
         | 
| 97 130 | 
             
              method_option :email, :type => :string, :default => nil
         | 
| 98 131 | 
             
              method_option :password, :type => :string, :default => nil
         | 
| @@ -676,7 +709,7 @@ class Tddium < Thor | |
| 676 709 | 
             
              end
         | 
| 677 710 |  | 
| 678 711 | 
             
              def set_default_environment
         | 
| 679 | 
            -
                env = options[:environment]
         | 
| 712 | 
            +
                env = options[:environment] || ENV['TDDIUM_CLIENT_ENVIRONMENT']
         | 
| 680 713 | 
             
                if env.nil?
         | 
| 681 714 | 
             
                  tddium_client.environment = :development
         | 
| 682 715 | 
             
                  tddium_client.environment = :production unless File.exists?(tddium_file_name)
         | 
| @@ -723,6 +756,13 @@ class Tddium < Thor | |
| 723 756 | 
             
                    say Text::Status::ALL_SUITES % current_suites["suites"].collect {|suite| suite["repo_name"]}.join(", ")
         | 
| 724 757 | 
             
                  end
         | 
| 725 758 |  | 
| 759 | 
            +
                  memberships = call_api(:get, Api::Path::MEMBERSHIPS)
         | 
| 760 | 
            +
                  if memberships["memberships"].length > 1
         | 
| 761 | 
            +
                    say Text::Status::ACCOUNT_MEMBERS
         | 
| 762 | 
            +
                    say memberships["memberships"].collect{|x|x['display']}.join("\n")
         | 
| 763 | 
            +
                    say "\n"
         | 
| 764 | 
            +
                  end
         | 
| 765 | 
            +
             | 
| 726 766 | 
             
                  account_usage = call_api(:get, Api::Path::ACCOUNT_USAGE)
         | 
| 727 767 | 
             
                  say account_usage["usage"]
         | 
| 728 768 | 
             
                rescue TddiumClient::Error::Base => e
         | 
    
        data/lib/tddium/constant.rb
    CHANGED
    
    | @@ -31,6 +31,7 @@ module TddiumConstant | |
| 31 31 | 
             
                  START_TEST_EXECUTIONS = "#{TEST_EXECUTIONS}/start"
         | 
| 32 32 | 
             
                  REPORT_TEST_EXECUTIONS = "#{TEST_EXECUTIONS}/report"
         | 
| 33 33 | 
             
                  ACCOUNT_USAGE = "accounts/usage"
         | 
| 34 | 
            +
                  MEMBERSHIPS = "memberships"
         | 
| 34 35 | 
             
                end
         | 
| 35 36 | 
             
                module ErrorCode
         | 
| 36 37 | 
             
                  INVALID_INVITATION = 2
         | 
| @@ -181,6 +182,10 @@ Subdomain and API token are shared by all suites that belong to you (%s). | |
| 181 182 | 
             
            Set the "Campfire room name" to 'disable' to disable Campfire notifications
         | 
| 182 183 | 
             
            for this suite.
         | 
| 183 184 | 
             
            EOF
         | 
| 185 | 
            +
                  ADDING_MEMBER = "Adding %<email>s as %<role>s..."
         | 
| 186 | 
            +
                  ADDED_MEMBER = "Added %s"
         | 
| 187 | 
            +
                  REMOVING_MEMBER = "Removing %s. This may take a few seconds..."
         | 
| 188 | 
            +
                  REMOVED_MEMBER = "Removed %s"
         | 
| 184 189 | 
             
                end
         | 
| 185 190 |  | 
| 186 191 | 
             
                module Status
         | 
| @@ -286,6 +291,7 @@ Run 'tddium suite --edit' to edit suite settings. | |
| 286 291 |  | 
| 287 292 | 
             
            Run 'tddium spec' to run tests in this suite.
         | 
| 288 293 | 
             
            EOF
         | 
| 294 | 
            +
                  ACCOUNT_MEMBERS = "\nAuthorized users in this account:\n"
         | 
| 289 295 | 
             
                end
         | 
| 290 296 |  | 
| 291 297 | 
             
                module Error
         | 
| @@ -343,7 +349,8 @@ EOF | |
| 343 349 | 
             
                    NOT_LOGGED_IN = "Log in to your heroku account first using 'heroku login'"
         | 
| 344 350 | 
             
                    APP_NOT_FOUND = "The app '%s' is not recognized by Heroku"
         | 
| 345 351 | 
             
                  end
         | 
| 346 | 
            -
                  
         | 
| 352 | 
            +
                  ADD_MEMBER_ERROR = "Error adding %s: %s"
         | 
| 353 | 
            +
                  REMOVE_MEMBER_ERROR = "Error removing %s: %s"
         | 
| 347 354 | 
             
                end
         | 
| 348 355 | 
             
              end
         | 
| 349 356 |  | 
    
        data/lib/tddium/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -2,7 +2,7 @@ | |
| 2 2 | 
             
            name: tddium-preview
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version 
         | 
| 4 4 | 
             
              prerelease: 
         | 
| 5 | 
            -
              version: 0. | 
| 5 | 
            +
              version: 0.8.0
         | 
| 6 6 | 
             
            platform: ruby
         | 
| 7 7 | 
             
            authors: 
         | 
| 8 8 | 
             
            - Solano Labs
         | 
| @@ -10,7 +10,7 @@ autorequire: | |
| 10 10 | 
             
            bindir: bin
         | 
| 11 11 | 
             
            cert_chain: []
         | 
| 12 12 |  | 
| 13 | 
            -
            date: 2011- | 
| 13 | 
            +
            date: 2011-09-02 00:00:00 -07:00
         | 
| 14 14 | 
             
            default_executable: 
         | 
| 15 15 | 
             
            dependencies: 
         | 
| 16 16 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| @@ -151,8 +151,10 @@ files: | |
| 151 151 | 
             
            - README.rdoc
         | 
| 152 152 | 
             
            - Rakefile
         | 
| 153 153 | 
             
            - bin/tddium
         | 
| 154 | 
            +
            - features/account_command.feature
         | 
| 154 155 | 
             
            - features/login_command.feature
         | 
| 155 156 | 
             
            - features/logout_command.feature
         | 
| 157 | 
            +
            - features/step_definitions/account_steps.rb
         | 
| 156 158 | 
             
            - features/step_definitions/aruba_steps.rb
         | 
| 157 159 | 
             
            - features/step_definitions/login_steps.rb
         | 
| 158 160 | 
             
            - features/step_definitions/mimic_steps.rb
         |