Skip to content

Instantly share code, notes, and snippets.

@okeen
Created April 4, 2012 15:45
Show Gist options
  • Save okeen/2303019 to your computer and use it in GitHub Desktop.
Save okeen/2303019 to your computer and use it in GitHub Desktop.
Use FactoryGirl to create User models based on actual Facebook test user data
#encoding: utf-8
#creates FB test users and stores their data in a YML file
task :create_and_load_facebook_test_users => :environment do
require 'koala'
@@file_name = "db/fb_test_users.yaml"
#FB doesn't allow integers on user names, so we need to create names like "user_aa", "user_ab", etc.
def next_name(player_number)
first_letter = ((player_number / 24).to_i + 97).chr
second_letter = ((player_number % 24).to_i + 97).chr
"player #{first_letter}#{second_letter}"
end
def create_facebook_user(name, with_app_installed)
begin
puts "Creating player #{name}"
user = @test_users.create(with_app_installed, "email,create_event,rsvp_event", {:name => name})
puts "Created user #{user.inspect}, #{with_app_installed}"
@current_test_users << user.merge('name'=> name)
rescue => e
puts "Error creating #{name}: #{e.inspect}"
end
end
id= Tendel::Application.config.facebook[RAILS_ENV][:app_id]
secret = Tendel::Application.config.facebook[RAILS_ENV][:app_secret]
@test_users = Koala::Facebook::TestUsers.new(:app_id => id, :secret => secret)
puts "Connected with Facebook"
@current_test_users = File.exists?(@@file_name) ?
YAML.load(File.open(@@file_name)) : []
puts "Loaded App test users: #{@current_test_users}"
@current_test_users.count.upto 200 do |index|
name = next_name(index)
create_facebook_user(name, true)
end
#create 5 users with the app still uninstalled
5.times do |index|
name = next_name(index) + " un"
create_facebook_user(name, false)
end
File.open("db/fb_test_users.yaml", "w") { |file|
file.puts(@current_test_users.to_yaml)
}
end
FactoryGirl.define do
unless File.exists? "db/fb_test_users.yaml"
raise "Please generate first the facebook test users file"
end
@facebook_players = YAML.load(File.open("db/fb_test_users.yaml"))
#offset where uninstalled players (user's with FB account still to link) start in the list
@offset = @facebook_players.count - 5
sequence :player_name do |n|
@facebook_players[n-1]['name']
end
sequence :password do |n|
@facebook_players[n-1]['password']
end
sequence :email do |n|
@facebook_players[n-1]['email']
end
sequence :facebook_id do |n|
@facebook_players[n-1]['id'].to_i
end
factory :player do
name {Factory.next(:player_name)}
email {Factory.next(:email)}
password {Factory.next :password}
password_confirmation {"#{password}"}
facebook_id {Factory.next :facebook_id}
country {Factory.next :place_country}
city {Factory.next :place_city}
street {Factory.next :place_street}
latitude {42.88256 + (rand) - 0.5}
longitude {(-8.535357) + (rand) - 0.5}
full_address {"#{street}, #{city}, #{country}"}
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment