The purpose of the talk is to show some of the methodologies, tools and practices performed in Crowd Interactive that have helped us to become a world-class company.
Talk given to Tech Women Community during their 14th monthly meetup
“A collaborative approach to defining requirements and business-oriented functional tests for software products based on capturing and illustrating requirements using realistic examples instead of abstract statements”
Feature: Login In order to use the application As a user I want to be able to login Scenario: with invalid credentials Given I visit the / page And I have entered demo as my username And I have entered demo1234 as my password When I press Sign in Then I will be shown a message error Scenario: with valid credentials Given I have created an account in the past And I visit the /events page And I have entered demo as my username And I have entered demo1234 as my password When I press Sign in Then I will be redirected to events page
class User < ActiveRecord::Base # Method that checks if a user has a @crowdint.com account def has_crowdint_account? !!self.email.match(/@crowdint.com$/) end end
require 'rails_helper' describe User do let(:user_with_crowdint_account) { User.create email: '[email protected]' } let(:user_with_gmail_account) { User.create email: '[email protected]' } describe '.has_crowdint_account?' do it 'returns true when email ends with "@crowdint.com"' do expect(user_with_crowdint_account.has_crowdint_account?).to be_truthy end it 'returns false when email ends with "@crowdint.com"' do expect(user_with_gmail_account.has_crowdint_account?).to be_falsy end end end
Feature: Login In order to use the application As a user I want to be able to login Scenario: with invalid credentials Given I visit the / page And I have entered demo as my username And I have entered demo1234 as my password When I press Sign in Then I will be shown a message error Scenario: with valid credentials Given I have created an account in the past And I visit the /events page And I have entered demo as my username And I have entered demo1234 as my password When I press Sign in Then I will be redirected to events page
Feature: Login In order to use the application As a user I want to be able to login Scenario: with invalid credentials Given I visit the / page And I have entered demo as my username And I have entered demo1234 as my password When I press Sign in Then I will be shown a message error Scenario: with valid credentials Given I have created an account in the past And I visit the /events page And I have entered demo as my username And I have entered demo1234 as my password When I press Sign in Then I will be redirected to events page
Feature: Login In order to use the application As a user I want to be able to login Scenario: with invalid credentials Given I visit the / page And I have entered demo as my username And I have entered demo1234 as my password When I press Sign in Then I will be shown a message error Scenario: with valid credentials Given I have created an account in the past And I visit the /events page And I have entered demo as my username And I have entered demo1234 as my password When I press Sign in Then I will be redirected to events page
And(/^I have entered (.*) as my username$/) do |username| fill_in 'user[login]', with: username end And(/^I have entered (.*) as my password$/) do |password| fill_in 'user[password]', with: password end
Feature: Login In order to use the application As a user I want to be able to login Scenario: with invalid credentials Given I visit the / page And I have entered demo as my username And I have entered demo1234 as my password When I press Sign in Then I will be shown a message error Scenario: with valid credentials Given I have created an account in the past And I visit the /events page And I have entered demo as my username And I have entered demo1234 as my password When I press Sign in Then I will be redirected to events page
Given(/^I have created an account in the past$/) do @user = FactoryGirl.create :user, username: 'demo', password: 'demo1234' End Then(/^I will be shown a message error$/) do expect(page).to have_content 'Invalid login or password.' end When(/^I press Sign in$/) do click_button 'Sign in' end Then(/^I will be redirected to home page$/) do expect(page).to have_content 'Login successful' end Then(/^I will be redirected to (.*) page$/) do |url| path = URI.parse(current_url).path expect(path).to match "/#{url}" end
role :demo, %w{example.com example.org example.net} task :uptime do on roles(:demo), in: :parallel do |host| uptime = capture(:uptime) puts "#{host.hostname} reports: #{uptime}" end end
“Continuous Integration is the practice of merging development work with a Master/Trunk/Mainline branch constantly so that you can test changes, and test that changes work with other changes” http://blog.assembla.com/AssemblaBlog/tabid/12618/bid/92411/Continuous-Delivery-vs- Continuous-Deployment-vs-Continuous-Integration-Wait-huh.aspx
“Continuous Delivery is the continual delivery of code to an environment once the developer feels the code is ready to ship.” http://blog.assembla.com/AssemblaBlog/tabid/12618/bid/92411/Continuous-Delivery-vs- Continuous-Deployment-vs-Continuous-Integration-Wait-huh.aspx
“Continuous Deployment is the deployment or release of code to Production as soon as it is ready” http://blog.assembla.com/AssemblaBlog/tabid/12618/bid/92411/Continuous-Delivery-vs- Continuous-Deployment-vs-Continuous-Integration-Wait-huh.aspx