graybook 1.0.24 → 1.1.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/{CHANGES.md → CHANGELOG} +13 -2
- data/README +94 -0
- data/Rakefile +3 -22
- data/VERSION +1 -1
- data/VERSION.yml +2 -2
- data/VERSION_NAME +1 -1
- data/lib/graybook/importer/aol.rb +11 -11
- data/lib/graybook/importer/gmail.rb +20 -20
- data/lib/graybook/importer/hotmail.rb +2 -4
- data/lib/graybook/importer/page_scraper.rb +4 -2
- data/lib/graybook/importer/yahoo.rb +12 -12
- data/lib/graybook.rb +20 -21
- metadata +9 -102
- data/README.md +0 -66
- data/debug_graybook.rb +0 -10
- data/lib/graybook/exporter/vcf.rb +0 -45
- data/lib/graybook/exporter/xml.rb +0 -28
- data/lib/graybook/importer/csv.rb +0 -74
- data/lib/graybook/importer/freenet.rb +0 -62
- data/lib/graybook/importer/gmx.rb +0 -68
- data/lib/graybook/importer/web.de.rb +0 -67
- data/test/config/credentials.yml.example +0 -9
- data/test/fixtures/aol_application_page.html +0 -566
- data/test/fixtures/aol_bad_login_response_stage_3.html +0 -565
- data/test/fixtures/aol_contacts.html +0 -102
- data/test/fixtures/aol_login_response_stage_1.html +0 -158
- data/test/fixtures/aol_login_response_stage_2.html +0 -559
- data/test/fixtures/aol_login_response_stage_3.html +0 -48
- data/test/fixtures/aol_login_response_stage_4.html +0 -404
- data/test/fixtures/aol_login_response_stage_5.html +0 -404
- data/test/fixtures/aol_new_contacts.html +0 -431
- data/test/fixtures/gmail.csv +0 -3
- data/test/fixtures/gmail_bad_login_response_stage_2.html +0 -560
- data/test/fixtures/gmail_contacts.html +0 -228
- data/test/fixtures/gmail_login_response_stage_1.html +0 -556
- data/test/fixtures/gmail_login_response_stage_2.html +0 -1
- data/test/fixtures/gmail_login_response_stage_2a.html +0 -1
- data/test/fixtures/gmail_login_response_stage_3.html +0 -249
- data/test/fixtures/gmail_redirect_body.html +0 -10
- data/test/fixtures/hotmail_bad_login_response_stage_2.html +0 -31
- data/test/fixtures/hotmail_contacts.html +0 -262
- data/test/fixtures/hotmail_login_response_stage_1.html +0 -31
- data/test/fixtures/hotmail_login_response_stage_2.html +0 -1
- data/test/fixtures/hotmail_login_response_stage_3.html +0 -519
- data/test/fixtures/hotmail_scrape_first_page.html +0 -77
- data/test/fixtures/hotmail_scrape_response_stage_1.html +0 -90
- data/test/fixtures/hotmail_scrape_response_stage_2.html +0 -77
- data/test/fixtures/hotmail_scrape_response_stage_3.html +0 -0
- data/test/fixtures/yahoo_bad_login_response_stage_2.html +0 -443
- data/test/fixtures/yahoo_contacts.csv +0 -3
- data/test/fixtures/yahoo_contacts_not_logged_in.html +0 -432
- data/test/fixtures/yahoo_contacts_stage_1.html +0 -399
- data/test/fixtures/yahoo_login_response_stage_1.html +0 -433
- data/test/fixtures/yahoo_login_response_stage_2.html +0 -16
- data/test/fixtures/yahoo_no_user_response_stage_2.html +0 -574
- data/test/freenet_importer_test.rb +0 -53
- data/test/gmx_importer_test.rb +0 -53
- data/test/scripts/live_test.rb +0 -25
- data/test/test_graybook.rb +0 -60
- data/test/test_graybook_exporter_base.rb +0 -16
- data/test/test_graybook_exporter_vcf.rb +0 -52
- data/test/test_graybook_exporter_xml.rb +0 -16
- data/test/test_graybook_importer_aol.rb +0 -108
- data/test/test_graybook_importer_base.rb +0 -24
- data/test/test_graybook_importer_csv.rb +0 -60
- data/test/test_graybook_importer_gmail.rb +0 -116
- data/test/test_graybook_importer_hotmail.rb +0 -165
- data/test/test_graybook_importer_page_scraper.rb +0 -51
- data/test/test_graybook_importer_yahoo.rb +0 -137
- data/test/test_helper.rb +0 -71
- data/test/web.de_importer_test.rb +0 -53
- data/vendor/plugins/graybook/lib/autotest/discover.rb +0 -3
- data/vendor/plugins/graybook/lib/autotest/graybook.rb +0 -27
    
        data/test/gmx_importer_test.rb
    DELETED
    
    | @@ -1,53 +0,0 @@ | |
| 1 | 
            -
            require File.dirname(__FILE__) + '/../test_helper.rb'
         | 
| 2 | 
            -
             | 
| 3 | 
            -
            context "The GMX importer" do
         | 
| 4 | 
            -
             | 
| 5 | 
            -
              setup do
         | 
| 6 | 
            -
                @username, @password = GraybookExtensions::TestHelper::Credentials.new(:gmx).get
         | 
| 7 | 
            -
             | 
| 8 | 
            -
                @importer = Graybook::Importer::GMX.new
         | 
| 9 | 
            -
                @importer.create_agent
         | 
| 10 | 
            -
              end
         | 
| 11 | 
            -
             | 
| 12 | 
            -
              specify "should match emails" do
         | 
| 13 | 
            -
                @importer.=~(nil).should.not.be
         | 
| 14 | 
            -
                @importer.=~({}).should.not.be
         | 
| 15 | 
            -
                @importer.=~({ 'username' => "john@foo.com" }).should.not.be
         | 
| 16 | 
            -
                @importer.=~({ :username => "john@foo.com" }).should.not.be
         | 
| 17 | 
            -
                @importer.=~({ :username => "john" }).should.not.be
         | 
| 18 | 
            -
                @importer.=~({ :username => "john@gmx.de" }).should.be
         | 
| 19 | 
            -
                @importer.=~({ :username => "JOHN@GMX.DE" }).should.be
         | 
| 20 | 
            -
              end
         | 
| 21 | 
            -
             | 
| 22 | 
            -
              specify "should be able to login with correct credentials" do
         | 
| 23 | 
            -
                should.not.raise Exception do
         | 
| 24 | 
            -
                  login(@username, @password)
         | 
| 25 | 
            -
                end
         | 
| 26 | 
            -
              end
         | 
| 27 | 
            -
             | 
| 28 | 
            -
              specify "should raise BadCredentialsError on login with wrong credentials" do
         | 
| 29 | 
            -
                should.raise Graybook::BadCredentialsError do
         | 
| 30 | 
            -
                  login
         | 
| 31 | 
            -
                end
         | 
| 32 | 
            -
              end
         | 
| 33 | 
            -
             | 
| 34 | 
            -
              specify "should raise BadCredentialsError on login with correct username and wrong password" do
         | 
| 35 | 
            -
                should.raise Graybook::BadCredentialsError do
         | 
| 36 | 
            -
                  login(@username)
         | 
| 37 | 
            -
                end
         | 
| 38 | 
            -
              end
         | 
| 39 | 
            -
             | 
| 40 | 
            -
              specify "should able to get contacts" do
         | 
| 41 | 
            -
                login(@username, @password)
         | 
| 42 | 
            -
             | 
| 43 | 
            -
                contacts = @importer.scrape_contacts
         | 
| 44 | 
            -
                contacts.should.not.be.empty
         | 
| 45 | 
            -
                contacts.should.be.all { |contact| contact.is_a? Hash }
         | 
| 46 | 
            -
              end
         | 
| 47 | 
            -
             | 
| 48 | 
            -
              private
         | 
| 49 | 
            -
                def login(username = "foo", password = "bar")
         | 
| 50 | 
            -
                  @importer.options = { :username => username, :password => password }
         | 
| 51 | 
            -
                  @importer.login
         | 
| 52 | 
            -
                end
         | 
| 53 | 
            -
            end
         | 
    
        data/test/scripts/live_test.rb
    DELETED
    
    | @@ -1,25 +0,0 @@ | |
| 1 | 
            -
            #!/usr/bin/env ruby
         | 
| 2 | 
            -
            require File.join( File.dirname(__FILE__), '../../lib/graybook.rb' )
         | 
| 3 | 
            -
            require 'optparse'
         | 
| 4 | 
            -
             | 
| 5 | 
            -
            options = {}
         | 
| 6 | 
            -
            importer = :auto
         | 
| 7 | 
            -
             | 
| 8 | 
            -
            opts = OptionParser.new do |opts|
         | 
| 9 | 
            -
              opts.on("-u USERNAME") do |username|
         | 
| 10 | 
            -
                options[:username] = username
         | 
| 11 | 
            -
              end
         | 
| 12 | 
            -
              opts.on("-p PASSWORD") do |password|
         | 
| 13 | 
            -
                options[:password] = password
         | 
| 14 | 
            -
              end
         | 
| 15 | 
            -
              opts.on("-i [IMPORTER]") do |importer_name|
         | 
| 16 | 
            -
                importer = importer_name.to_sym
         | 
| 17 | 
            -
              end
         | 
| 18 | 
            -
              opts.on("-x [EXPORTER]") do |exporter_name|
         | 
| 19 | 
            -
                options[:as] = exporter_name.to_sym
         | 
| 20 | 
            -
              end
         | 
| 21 | 
            -
            end
         | 
| 22 | 
            -
             | 
| 23 | 
            -
            opts.parse!(ARGV)
         | 
| 24 | 
            -
             | 
| 25 | 
            -
            puts contacts = Graybook.get( importer, options )
         | 
    
        data/test/test_graybook.rb
    DELETED
    
    | @@ -1,60 +0,0 @@ | |
| 1 | 
            -
            require File.join( File.dirname(__FILE__), '../lib/graybook.rb' )
         | 
| 2 | 
            -
            require File.join( File.dirname(__FILE__), 'test_helper.rb' )
         | 
| 3 | 
            -
            require 'test/unit'
         | 
| 4 | 
            -
            require 'mocha'
         | 
| 5 | 
            -
             | 
| 6 | 
            -
            class TestGraybook < Test::Unit::TestCase
         | 
| 7 | 
            -
             | 
| 8 | 
            -
              include TestHelper
         | 
| 9 | 
            -
             | 
| 10 | 
            -
              def test_class_get
         | 
| 11 | 
            -
                Graybook.any_instance.expects(:get)
         | 
| 12 | 
            -
                Graybook.get
         | 
| 13 | 
            -
              end
         | 
| 14 | 
            -
             | 
| 15 | 
            -
              def test_class_instance
         | 
| 16 | 
            -
                assert Graybook.instance.is_a?(Graybook)
         | 
| 17 | 
            -
              end
         | 
| 18 | 
            -
             | 
| 19 | 
            -
              def test_class_register
         | 
| 20 | 
            -
                Graybook.register(:base, Graybook::Exporter::Base)
         | 
| 21 | 
            -
                assert Graybook.instance.exporters[:base].is_a?(Graybook::Exporter::Base)
         | 
| 22 | 
            -
                
         | 
| 23 | 
            -
                Graybook.register(:base, Graybook::Importer::Base)
         | 
| 24 | 
            -
                assert Graybook.instance.importers[:base].is_a?(Graybook::Importer::Base)
         | 
| 25 | 
            -
              end
         | 
| 26 | 
            -
             | 
| 27 | 
            -
              def test_class_register_raises_on_bad_register
         | 
| 28 | 
            -
                assert_raises(ArgumentError) do
         | 
| 29 | 
            -
                  Graybook.register(:bad, String)
         | 
| 30 | 
            -
                end
         | 
| 31 | 
            -
              end
         | 
| 32 | 
            -
             | 
| 33 | 
            -
              def test_export
         | 
| 34 | 
            -
                importer = Graybook::Importer::Base.new
         | 
| 35 | 
            -
                exporter = Graybook::Exporter::Base.new
         | 
| 36 | 
            -
                importer.expects(:import)
         | 
| 37 | 
            -
                exporter.expects(:export)
         | 
| 38 | 
            -
                Graybook.instance.export( importer, exporter, {} )
         | 
| 39 | 
            -
              end
         | 
| 40 | 
            -
             | 
| 41 | 
            -
              def test_find_importer
         | 
| 42 | 
            -
                base = Graybook::Importer::Base.new
         | 
| 43 | 
            -
                base.stubs(:=~).returns(true)
         | 
| 44 | 
            -
                Graybook.any_instance.stubs(:importers).returns({:basic => base})
         | 
| 45 | 
            -
                assert_equal base, Graybook.instance.find_importer(:as => :basic)
         | 
| 46 | 
            -
                
         | 
| 47 | 
            -
                base.stubs(:=~).returns(false)
         | 
| 48 | 
            -
                assert_nil Graybook.instance.find_importer(:as => :basic)
         | 
| 49 | 
            -
              end
         | 
| 50 | 
            -
             | 
| 51 | 
            -
              def test_get
         | 
| 52 | 
            -
                cards = Graybook.instance.get( :csv, :file => fixture_file('gmail.csv') )
         | 
| 53 | 
            -
                assert_equal 2, cards.size
         | 
| 54 | 
            -
                assert cards.detect{|card| card[:name] == "Joe User"}
         | 
| 55 | 
            -
                assert cards.detect{|card| card[:name] == "Some Guy"}
         | 
| 56 | 
            -
                assert cards.detect{|card| card[:email] == "joeuser@example.com"}
         | 
| 57 | 
            -
                assert cards.detect{|card| card[:email] == "someguy@example.com"}
         | 
| 58 | 
            -
              end
         | 
| 59 | 
            -
              
         | 
| 60 | 
            -
            end
         | 
| @@ -1,16 +0,0 @@ | |
| 1 | 
            -
            require File.join( File.dirname(__FILE__), '../lib/graybook.rb' )
         | 
| 2 | 
            -
            require File.join( File.dirname(__FILE__), 'test_helper.rb' )
         | 
| 3 | 
            -
            require 'test/unit'
         | 
| 4 | 
            -
            require 'mocha'
         | 
| 5 | 
            -
             | 
| 6 | 
            -
            class TestGraybookExporterBase < Test::Unit::TestCase
         | 
| 7 | 
            -
             | 
| 8 | 
            -
              include TestHelper
         | 
| 9 | 
            -
             | 
| 10 | 
            -
              def test_export
         | 
| 11 | 
            -
                exporter = Graybook::Exporter::Base.new
         | 
| 12 | 
            -
                contacts = [{ :name => 'Test', :email => 'test@domain.com' }]
         | 
| 13 | 
            -
                assert_equal contacts, exporter.export(contacts)
         | 
| 14 | 
            -
              end
         | 
| 15 | 
            -
             | 
| 16 | 
            -
            end
         | 
| @@ -1,52 +0,0 @@ | |
| 1 | 
            -
            require File.join( File.dirname(__FILE__), '../lib/graybook.rb' )
         | 
| 2 | 
            -
            require File.join( File.dirname(__FILE__), 'test_helper.rb' )
         | 
| 3 | 
            -
            require 'test/unit'
         | 
| 4 | 
            -
            require 'mocha'
         | 
| 5 | 
            -
             | 
| 6 | 
            -
            class TestGraybookExporterVcf < Test::Unit::TestCase
         | 
| 7 | 
            -
             | 
| 8 | 
            -
              include TestHelper
         | 
| 9 | 
            -
             | 
| 10 | 
            -
              def setup
         | 
| 11 | 
            -
                @card = Graybook::Exporter::Vcf::Vcard.new(
         | 
| 12 | 
            -
                         {'first' => 'joe', 'last' => 'user', 
         | 
| 13 | 
            -
                          'email' => 'joe.user@example.com'})
         | 
| 14 | 
            -
                @exporter = Graybook::Exporter::Vcf.new
         | 
| 15 | 
            -
              end
         | 
| 16 | 
            -
             | 
| 17 | 
            -
              def test_vcard
         | 
| 18 | 
            -
                assert_equal 'joe', @card.first
         | 
| 19 | 
            -
                assert_equal 'user', @card.last
         | 
| 20 | 
            -
                assert_equal 'joe.user@example.com', @card.email
         | 
| 21 | 
            -
              end
         | 
| 22 | 
            -
             | 
| 23 | 
            -
              def test_vcard_to_s
         | 
| 24 | 
            -
                card = %q!BEGIN:VCARD
         | 
| 25 | 
            -
            N:user;joe
         | 
| 26 | 
            -
            EMAIL:joe.user@example.com
         | 
| 27 | 
            -
            END:VCARD
         | 
| 28 | 
            -
            !
         | 
| 29 | 
            -
                assert_equal card, @card.to_s
         | 
| 30 | 
            -
                assert_equal 'user', @card.last
         | 
| 31 | 
            -
                assert_equal 'joe.user@example.com', @card.email
         | 
| 32 | 
            -
              end
         | 
| 33 | 
            -
             | 
| 34 | 
            -
              def test_export
         | 
| 35 | 
            -
                contacts = [{ :name => 'Test', :email => 'test@example.com' }]
         | 
| 36 | 
            -
                expected = <<VCF
         | 
| 37 | 
            -
            BEGIN:VCARD
         | 
| 38 | 
            -
            N:;Test
         | 
| 39 | 
            -
            EMAIL:test@example.com
         | 
| 40 | 
            -
            END:VCARD
         | 
| 41 | 
            -
            VCF
         | 
| 42 | 
            -
                exported = @exporter.export(contacts)
         | 
| 43 | 
            -
                assert_equal 1, exported.size
         | 
| 44 | 
            -
                assert_equal expected, exported.first.to_s
         | 
| 45 | 
            -
              end
         | 
| 46 | 
            -
             | 
| 47 | 
            -
              def test_export_when_contacts_blank
         | 
| 48 | 
            -
                assert_nil @exporter.export()
         | 
| 49 | 
            -
                assert_nil @exporter.export([])
         | 
| 50 | 
            -
              end
         | 
| 51 | 
            -
             | 
| 52 | 
            -
            end
         | 
| @@ -1,16 +0,0 @@ | |
| 1 | 
            -
            require File.join( File.dirname(__FILE__), '../lib/graybook.rb' )
         | 
| 2 | 
            -
            require File.join( File.dirname(__FILE__), 'test_helper.rb' )
         | 
| 3 | 
            -
            require 'test/unit'
         | 
| 4 | 
            -
            require 'mocha'
         | 
| 5 | 
            -
             | 
| 6 | 
            -
            class TestGraybookExporterXml < Test::Unit::TestCase
         | 
| 7 | 
            -
             | 
| 8 | 
            -
              include TestHelper
         | 
| 9 | 
            -
             | 
| 10 | 
            -
              def test_export
         | 
| 11 | 
            -
                exporter = Graybook::Exporter::Xml.new
         | 
| 12 | 
            -
                contacts = [{ :name => 'Test', :email => 'test@domain.com' }]
         | 
| 13 | 
            -
                assert_equal "<?xml version='1.0'?><contacts><contact><name>Test</name><email>test@domain.com</email></contact></contacts>", exporter.export(contacts)
         | 
| 14 | 
            -
              end
         | 
| 15 | 
            -
             | 
| 16 | 
            -
            end
         | 
| @@ -1,108 +0,0 @@ | |
| 1 | 
            -
            require File.join( File.dirname(__FILE__), '../lib/graybook.rb' )
         | 
| 2 | 
            -
            require File.join( File.dirname(__FILE__), 'test_helper.rb' )
         | 
| 3 | 
            -
            require 'test/unit'
         | 
| 4 | 
            -
            require 'mocha'
         | 
| 5 | 
            -
            require 'mechanize'
         | 
| 6 | 
            -
             | 
| 7 | 
            -
             | 
| 8 | 
            -
            class TestGraybookImporterAol < Test::Unit::TestCase
         | 
| 9 | 
            -
             | 
| 10 | 
            -
              include TestHelper
         | 
| 11 | 
            -
             | 
| 12 | 
            -
              def setup
         | 
| 13 | 
            -
                @importer = Graybook::Importer::Aol.new
         | 
| 14 | 
            -
                @importer.options = {:username => 'user@aol.com', :password => 'password'}
         | 
| 15 | 
            -
                @importer.create_agent
         | 
| 16 | 
            -
              end
         | 
| 17 | 
            -
             | 
| 18 | 
            -
              def test_prepare
         | 
| 19 | 
            -
                @importer.expects(:login).once
         | 
| 20 | 
            -
                @importer.prepare
         | 
| 21 | 
            -
              end
         | 
| 22 | 
            -
             | 
| 23 | 
            -
              def test_importer_match
         | 
| 24 | 
            -
                assert_equal false, @importer =~ nil
         | 
| 25 | 
            -
                assert_equal false, @importer =~ {}
         | 
| 26 | 
            -
                assert_equal false, @importer =~ {'username' => 'joe@example.com'}
         | 
| 27 | 
            -
                assert_equal false, @importer =~ {:username => 'joe@example.com'}
         | 
| 28 | 
            -
                assert_equal false, @importer =~ {:username => 'joe'}
         | 
| 29 | 
            -
                assert_equal true, @importer =~ {:username => 'joe@aol.com'}
         | 
| 30 | 
            -
                assert_equal true, @importer =~ {:username => 'joe@aim.com'}
         | 
| 31 | 
            -
                assert_equal true, @importer =~ {:username => 'JOE@AOL.COM'}
         | 
| 32 | 
            -
                assert_equal true, @importer =~ {:username => 'JOE@AIM.COM'}
         | 
| 33 | 
            -
              end
         | 
| 34 | 
            -
             | 
| 35 | 
            -
              def test_login
         | 
| 36 | 
            -
                response = {'content-type' => 'text/html'}
         | 
| 37 | 
            -
             | 
| 38 | 
            -
                body = load_fixture('aol_login_response_stage_2.html').join
         | 
| 39 | 
            -
                page = WWW::Mechanize::Page.new(uri=nil, response, body, code=nil, mech=nil)
         | 
| 40 | 
            -
                @importer.agent.expects(:get).with('http://webmail.aol.com/').once.returns(page)
         | 
| 41 | 
            -
             | 
| 42 | 
            -
                body = load_fixture('aol_login_response_stage_3.html').join
         | 
| 43 | 
            -
                page = WWW::Mechanize::Page.new(uri=nil, response, body, code=nil, mech=nil)
         | 
| 44 | 
            -
                @importer.agent.expects(:submit).once.returns(page)
         | 
| 45 | 
            -
             | 
| 46 | 
            -
                body = load_fixture('aol_login_response_stage_4.html').join
         | 
| 47 | 
            -
                page = WWW::Mechanize::Page.new(uri=nil, response, body, code=nil, mech=nil)
         | 
| 48 | 
            -
                @importer.agent.expects(:get).with('/31361/aim/en-us/Lite/Today.aspx').once.returns(page)
         | 
| 49 | 
            -
             | 
| 50 | 
            -
                assert_nothing_raised do
         | 
| 51 | 
            -
                  assert @importer.login
         | 
| 52 | 
            -
                end
         | 
| 53 | 
            -
              end
         | 
| 54 | 
            -
             | 
| 55 | 
            -
              def test_login_bad_credentials
         | 
| 56 | 
            -
                response = {'content-type' => 'text/html'}
         | 
| 57 | 
            -
             | 
| 58 | 
            -
                body = load_fixture('aol_login_response_stage_2.html').join
         | 
| 59 | 
            -
                page = WWW::Mechanize::Page.new(uri=nil, response, body, code=nil, mech=nil)
         | 
| 60 | 
            -
                @importer.agent.expects(:get).with('http://webmail.aol.com/').once.returns(page)
         | 
| 61 | 
            -
             | 
| 62 | 
            -
                body = load_fixture('aol_bad_login_response_stage_3.html').join
         | 
| 63 | 
            -
                page = WWW::Mechanize::Page.new(uri=nil, response, body, code=nil, mech=nil)
         | 
| 64 | 
            -
                @importer.agent.expects(:submit).once.returns(page)
         | 
| 65 | 
            -
             | 
| 66 | 
            -
                assert_raises(Graybook::BadCredentialsError) do
         | 
| 67 | 
            -
                  @importer.login
         | 
| 68 | 
            -
                end
         | 
| 69 | 
            -
              end
         | 
| 70 | 
            -
             | 
| 71 | 
            -
              def test_scrape_contacts_raises_badcredentialerror_when_not_logged_in
         | 
| 72 | 
            -
                @importer.agent.expects(:cookies).once.returns([])
         | 
| 73 | 
            -
                assert_raises(Graybook::BadCredentialsError) do
         | 
| 74 | 
            -
                  @importer.scrape_contacts
         | 
| 75 | 
            -
                end
         | 
| 76 | 
            -
              end
         | 
| 77 | 
            -
             | 
| 78 | 
            -
              def test_scrape_contacts
         | 
| 79 | 
            -
                cookie = WWW::Mechanize::Cookie.new('Auth',
         | 
| 80 | 
            -
                  'ver:7&uas:user%2cuser%2caim.com%2c0%2c0%2c0%2cAIM%2cen-us%2c2%2c633308135438559961%2c0%2c1%3b&un:user&at:SNS&sn:user&wim:djEgMVM%253D-Qg0R3W9DSOpFNfKRog8SxBigVbPg%252BDTtGsaBctTczECZruX82XONmIMGYsY%253D&sty:0&ud:aim.com&uid:graybookuid&ss:633308135438559961&sst:1195234657&la:633308135438559961&lrid:25156&act:M&br:0&mbt:T&uv:AIM&lc:en-us&acd:315532800&pix:0&prmc:135925&relm:im&mah:&sah:&snh:ZDdhMTQ5YjlmZjQ5NTE5ZTFkYWI5OTU0ZDU1NWNlYTM%3d&miu:True&sit:sns.webmail.aol.com&ckd:.webmail.aol.com&ckp:%2f&ha:ABrytqN65h7Czwu0%2bDXlQGuc%2fQY%3d&')
         | 
| 81 | 
            -
                cookie.domain = 'localhost'
         | 
| 82 | 
            -
                @importer.agent.expects(:cookies).once.returns([cookie])
         | 
| 83 | 
            -
             | 
| 84 | 
            -
                response = {'content-type' => 'text/html'}
         | 
| 85 | 
            -
                body = load_fixture('aol_application_page.html').join
         | 
| 86 | 
            -
                uri = URI.parse('http://webmail.aol.com/34865/aim/en-us/Lite/Today.aspx')
         | 
| 87 | 
            -
                page = WWW::Mechanize::Page.new(uri, response, body, code=nil, mech=nil)
         | 
| 88 | 
            -
                @importer.agent.expects(:current_page).times(2).returns(page)
         | 
| 89 | 
            -
             | 
| 90 | 
            -
                response = {'content-type' => 'text/html'}
         | 
| 91 | 
            -
                body = load_fixture('aol_contacts.html').join
         | 
| 92 | 
            -
                page = WWW::Mechanize::Page.new(uri=nil, response, body, code=nil, mech=nil)
         | 
| 93 | 
            -
                @importer.agent.expects(:get).with(
         | 
| 94 | 
            -
                  'http://webmail.aol.com/34865/aim/en-us/Lite/addresslist-print.aspx?command=all&sort=FirstLastNick&sortDir=Ascending&nameFormat=FirstLastNick&user=ULKLrUelQ2'
         | 
| 95 | 
            -
                ).once.returns(page)
         | 
| 96 | 
            -
             | 
| 97 | 
            -
                assert_nothing_raised do
         | 
| 98 | 
            -
                  contacts = @importer.scrape_contacts
         | 
| 99 | 
            -
                  assert_equal 2, contacts.size
         | 
| 100 | 
            -
                  assert contacts.detect{|c| c[:email] == 'joe.user@example.com'}
         | 
| 101 | 
            -
                  assert contacts.detect{|c| c[:name] == 'Joe User'}
         | 
| 102 | 
            -
                  assert contacts.detect{|c| c[:email] == 'jane.user@example.com'}
         | 
| 103 | 
            -
                  assert contacts.detect{|c| c[:name] == 'Jane User'}
         | 
| 104 | 
            -
                  assert contacts.detect{|c| c[:name] == 'NoEmail Dude'} == nil
         | 
| 105 | 
            -
                end
         | 
| 106 | 
            -
              end
         | 
| 107 | 
            -
             | 
| 108 | 
            -
            end
         | 
| @@ -1,24 +0,0 @@ | |
| 1 | 
            -
            require File.join( File.dirname(__FILE__), '../lib/graybook.rb' )
         | 
| 2 | 
            -
            require File.join( File.dirname(__FILE__), 'test_helper.rb' )
         | 
| 3 | 
            -
            require 'test/unit'
         | 
| 4 | 
            -
            require 'mocha'
         | 
| 5 | 
            -
             | 
| 6 | 
            -
            class TestGraybookImporterBase < Test::Unit::TestCase
         | 
| 7 | 
            -
             | 
| 8 | 
            -
              include TestHelper
         | 
| 9 | 
            -
             | 
| 10 | 
            -
              def test_service_name
         | 
| 11 | 
            -
                assert_equal "Base", Graybook::Importer::Base.new.service_name
         | 
| 12 | 
            -
              end
         | 
| 13 | 
            -
             | 
| 14 | 
            -
              def test_import
         | 
| 15 | 
            -
                importer = Graybook::Importer::Base.new
         | 
| 16 | 
            -
                importer.expects(:fetch_contacts!)
         | 
| 17 | 
            -
                options = {:foo => 'bar'}
         | 
| 18 | 
            -
                assert_nothing_raised do
         | 
| 19 | 
            -
                  importer.import(options)
         | 
| 20 | 
            -
                end
         | 
| 21 | 
            -
                assert_equal options, importer.options
         | 
| 22 | 
            -
              end
         | 
| 23 | 
            -
             | 
| 24 | 
            -
            end
         | 
| @@ -1,60 +0,0 @@ | |
| 1 | 
            -
            require File.join( File.dirname(__FILE__), '../lib/graybook.rb' )
         | 
| 2 | 
            -
            require File.join( File.dirname(__FILE__), 'test_helper.rb' )
         | 
| 3 | 
            -
            require 'tempfile'
         | 
| 4 | 
            -
            require 'test/unit'
         | 
| 5 | 
            -
            require 'mocha'
         | 
| 6 | 
            -
             | 
| 7 | 
            -
            class TestGraybookImporterCsv < Test::Unit::TestCase
         | 
| 8 | 
            -
             | 
| 9 | 
            -
              include TestHelper
         | 
| 10 | 
            -
             | 
| 11 | 
            -
              def setup
         | 
| 12 | 
            -
                @importer = Graybook::Importer::Csv.new
         | 
| 13 | 
            -
              end
         | 
| 14 | 
            -
             | 
| 15 | 
            -
              def test_importer_match
         | 
| 16 | 
            -
                csv = Tempfile.new('test.csv')
         | 
| 17 | 
            -
                assert_equal false, @importer =~ nil
         | 
| 18 | 
            -
                assert_equal false, @importer =~ {}
         | 
| 19 | 
            -
                assert_equal false, @importer =~ {:file => nil}
         | 
| 20 | 
            -
                assert_equal true, @importer =~ {:file => csv}
         | 
| 21 | 
            -
              end
         | 
| 22 | 
            -
             | 
| 23 | 
            -
              def test_to_hash
         | 
| 24 | 
            -
                cols = [:name, :email, :misc]
         | 
| 25 | 
            -
                assert_equal({:name => 'joe', :email => 'joe@example.com', :misc => ''}, 
         | 
| 26 | 
            -
                  @importer.to_hash(cols,['joe', 'joe@example.com']))
         | 
| 27 | 
            -
                assert_equal({:name => 'joe', :email => 'joe@example.com', :misc => 'foo'}, 
         | 
| 28 | 
            -
                  @importer.to_hash(cols,['joe', 'joe@example.com', 'foo']))
         | 
| 29 | 
            -
                assert_equal({:name => 'joe', :email => 'joe@example.com', :misc => 'foo,bar'}, 
         | 
| 30 | 
            -
                  @importer.to_hash(cols,['joe', 'joe@example.com', 'foo', 'bar']))
         | 
| 31 | 
            -
              end
         | 
| 32 | 
            -
             | 
| 33 | 
            -
              def test_to_columns
         | 
| 34 | 
            -
                assert_equal [:name,:email,:misc], @importer.to_columns('name,email,misc')
         | 
| 35 | 
            -
                assert_equal [:name,:email,:misc], @importer.to_columns('Name,email,misc')
         | 
| 36 | 
            -
                assert_equal [:name,:email,:misc], @importer.to_columns('Name,Email,misc')
         | 
| 37 | 
            -
                assert_equal [:name,:email,:misc], @importer.to_columns('Name,E-mail,misc')
         | 
| 38 | 
            -
              end
         | 
| 39 | 
            -
             | 
| 40 | 
            -
              def test_fetch_contacts_with_no_column_names
         | 
| 41 | 
            -
                file = mock(:path => '/tmp/test.csv')
         | 
| 42 | 
            -
                options = {:file => file}
         | 
| 43 | 
            -
                @importer.instance_variable_set(:@options, options)
         | 
| 44 | 
            -
                IO.expects(:readlines).with('/tmp/test.csv').once.returns(['joe,joe@example.com','fred,fred@example.com'])
         | 
| 45 | 
            -
                expected = [{:name => 'joe', :email => 'joe@example.com', :misc => ''},
         | 
| 46 | 
            -
                            {:name => 'fred', :email => 'fred@example.com', :misc => ''}]
         | 
| 47 | 
            -
                assert_equal expected, @importer.fetch_contacts!
         | 
| 48 | 
            -
              end
         | 
| 49 | 
            -
             | 
| 50 | 
            -
              def test_fetch_contacts_with_column_names
         | 
| 51 | 
            -
                file = mock(:path => '/tmp/test.csv')
         | 
| 52 | 
            -
                options = {:file => file}
         | 
| 53 | 
            -
                @importer.instance_variable_set(:@options, options)
         | 
| 54 | 
            -
                IO.expects(:readlines).with('/tmp/test.csv').once.returns(['name,email,misc','joe,joe@example.com','fred,fred@example.com'])
         | 
| 55 | 
            -
                expected = [{:name => 'joe', :email => 'joe@example.com', :misc => ''},
         | 
| 56 | 
            -
                            {:name => 'fred', :email => 'fred@example.com', :misc => ''}]
         | 
| 57 | 
            -
                assert_equal expected, @importer.fetch_contacts!
         | 
| 58 | 
            -
              end
         | 
| 59 | 
            -
             | 
| 60 | 
            -
            end
         | 
| @@ -1,116 +0,0 @@ | |
| 1 | 
            -
            require File.join( File.dirname(__FILE__), '../lib/graybook.rb' )
         | 
| 2 | 
            -
            require File.join( File.dirname(__FILE__), 'test_helper.rb' )
         | 
| 3 | 
            -
            require 'test/unit'
         | 
| 4 | 
            -
            require 'mocha'
         | 
| 5 | 
            -
             | 
| 6 | 
            -
            class TestGraybookImporterGmail < Test::Unit::TestCase
         | 
| 7 | 
            -
             | 
| 8 | 
            -
              include TestHelper
         | 
| 9 | 
            -
             | 
| 10 | 
            -
              def setup
         | 
| 11 | 
            -
                @importer = Graybook::Importer::Gmail.new
         | 
| 12 | 
            -
                @importer.options = {:username => 'user@gmail.com', :password => 'password'}
         | 
| 13 | 
            -
                @importer.create_agent
         | 
| 14 | 
            -
              end
         | 
| 15 | 
            -
             | 
| 16 | 
            -
              def test_prepare
         | 
| 17 | 
            -
                @importer.expects(:login).once
         | 
| 18 | 
            -
                @importer.prepare
         | 
| 19 | 
            -
              end
         | 
| 20 | 
            -
             | 
| 21 | 
            -
              def test_importer_match
         | 
| 22 | 
            -
                assert_equal false, @importer =~ nil
         | 
| 23 | 
            -
                assert_equal false, @importer =~ {}
         | 
| 24 | 
            -
                assert_equal false, @importer =~ {'username' => 'joe@example.com'}
         | 
| 25 | 
            -
                assert_equal false, @importer =~ {:username => 'joe@example.com'}
         | 
| 26 | 
            -
                assert_equal false, @importer =~ {:username => 'joe'}
         | 
| 27 | 
            -
                assert_equal true, @importer =~ {:username => 'joe@gmail.com'}
         | 
| 28 | 
            -
                assert_equal true, @importer =~ {:username => 'JOE@GMAIL.COM'}
         | 
| 29 | 
            -
              end
         | 
| 30 | 
            -
             | 
| 31 | 
            -
              def test_bad_login
         | 
| 32 | 
            -
                response = {'content-type' => 'text/html'}
         | 
| 33 | 
            -
             | 
| 34 | 
            -
                body = load_fixture('gmail_login_response_stage_1.html').join
         | 
| 35 | 
            -
                page = WWW::Mechanize::Page.new(uri=nil, response, body, code=nil, mech=nil)
         | 
| 36 | 
            -
                @importer.agent.expects(:get).with('http://mail.google.com/mail/').once.returns(page)
         | 
| 37 | 
            -
             | 
| 38 | 
            -
                body = load_fixture('gmail_bad_login_response_stage_2.html').join
         | 
| 39 | 
            -
                page = WWW::Mechanize::Page.new(uri=nil, response, body, code=nil, mech=nil)
         | 
| 40 | 
            -
                @importer.agent.expects(:submit).once.returns(page)
         | 
| 41 | 
            -
             | 
| 42 | 
            -
                assert_raises(Graybook::BadCredentialsError) do
         | 
| 43 | 
            -
                  @importer.login
         | 
| 44 | 
            -
                end
         | 
| 45 | 
            -
              end
         | 
| 46 | 
            -
             | 
| 47 | 
            -
              def test_login
         | 
| 48 | 
            -
                response = {'content-type' => 'text/html'}
         | 
| 49 | 
            -
             | 
| 50 | 
            -
                body = load_fixture('gmail_login_response_stage_1.html').join
         | 
| 51 | 
            -
                page = WWW::Mechanize::Page.new(uri=nil, response, body, code=nil, mech=nil)
         | 
| 52 | 
            -
                @importer.agent.expects(:get).with('http://mail.google.com/mail/').once.returns(page)
         | 
| 53 | 
            -
             | 
| 54 | 
            -
                body = load_fixture('gmail_login_response_stage_2.html').join
         | 
| 55 | 
            -
                page = WWW::Mechanize::Page.new(uri=nil, response, body, code=nil, mech=nil)
         | 
| 56 | 
            -
                @importer.agent.expects(:submit).once.returns(page)
         | 
| 57 | 
            -
             | 
| 58 | 
            -
                body = load_fixture('gmail_login_response_stage_3.html').join
         | 
| 59 | 
            -
                page = WWW::Mechanize::Page.new(uri=nil, response, body, code=nil, mech=nil)
         | 
| 60 | 
            -
                @importer.agent.expects(:get).with('http://mail.google.com/mail/?ui=html&zy=l').once.returns(page)
         | 
| 61 | 
            -
             | 
| 62 | 
            -
                assert_nothing_raised do
         | 
| 63 | 
            -
                  # assert @importer.login
         | 
| 64 | 
            -
                  @importer.login
         | 
| 65 | 
            -
                end
         | 
| 66 | 
            -
              end
         | 
| 67 | 
            -
             | 
| 68 | 
            -
              def test_login_alternative_uri
         | 
| 69 | 
            -
                response = {'content-type' => 'text/html'}
         | 
| 70 | 
            -
             | 
| 71 | 
            -
                body = load_fixture('gmail_login_response_stage_1.html').join
         | 
| 72 | 
            -
                page = WWW::Mechanize::Page.new(uri=nil, response, body, code=nil, mech=nil)
         | 
| 73 | 
            -
                @importer.agent.expects(:get).with('http://mail.google.com/mail/').once.returns(page)
         | 
| 74 | 
            -
             | 
| 75 | 
            -
                body = load_fixture('gmail_login_response_stage_2a.html').join
         | 
| 76 | 
            -
                page = WWW::Mechanize::Page.new(uri=nil, response, body, code=nil, mech=nil)
         | 
| 77 | 
            -
                @importer.agent.expects(:submit).once.returns(page)
         | 
| 78 | 
            -
             | 
| 79 | 
            -
                body = load_fixture('gmail_login_response_stage_3.html').join
         | 
| 80 | 
            -
                page = WWW::Mechanize::Page.new(uri=nil, response, body, code=nil, mech=nil)
         | 
| 81 | 
            -
                @importer.agent.expects(:get).with('http://mail.google.com/mail/?ui=html&zy=l').once.returns(page)
         | 
| 82 | 
            -
             | 
| 83 | 
            -
                assert_nothing_raised do
         | 
| 84 | 
            -
                  # assert @importer.login
         | 
| 85 | 
            -
                  @importer.login
         | 
| 86 | 
            -
                end
         | 
| 87 | 
            -
              end
         | 
| 88 | 
            -
             | 
| 89 | 
            -
              def test_scrape_contacts_raises_badcredentialerror_when_not_logged_in
         | 
| 90 | 
            -
                @importer.agent.expects(:cookies).once.returns([])
         | 
| 91 | 
            -
                assert_raises(Graybook::BadCredentialsError) do
         | 
| 92 | 
            -
                  @importer.scrape_contacts
         | 
| 93 | 
            -
                end
         | 
| 94 | 
            -
              end
         | 
| 95 | 
            -
              
         | 
| 96 | 
            -
              def test_scrape_contacts
         | 
| 97 | 
            -
                cookie = WWW::Mechanize::Cookie.new('GAUSR', 'mail:user@gmail.com')
         | 
| 98 | 
            -
                @importer.agent.expects(:cookies).once.returns([cookie])
         | 
| 99 | 
            -
             | 
| 100 | 
            -
                response = {'content-type' => 'text/html'}
         | 
| 101 | 
            -
                body = load_fixture('gmail_contacts.html').join
         | 
| 102 | 
            -
                page = WWW::Mechanize::Page.new(uri=nil, response, body, code=nil, mech=nil)
         | 
| 103 | 
            -
                @importer.agent.expects(:get).with(
         | 
| 104 | 
            -
                  'http://mail.google.com/mail/h/?v=cl&pnl=a').once.returns(page)
         | 
| 105 | 
            -
             | 
| 106 | 
            -
                assert_nothing_raised do
         | 
| 107 | 
            -
                  contacts = @importer.scrape_contacts
         | 
| 108 | 
            -
                  assert_equal 2, contacts.size
         | 
| 109 | 
            -
                  assert contacts.detect{|c| c[:email] == 'joe.user@example.com'}
         | 
| 110 | 
            -
                  assert contacts.detect{|c| c[:name] == 'Joe User'}
         | 
| 111 | 
            -
                  assert contacts.detect{|c| c[:email] == 'jane.user@example.com'}
         | 
| 112 | 
            -
                  assert contacts.detect{|c| c[:name] == 'Jane User'}
         | 
| 113 | 
            -
                end
         | 
| 114 | 
            -
              end
         | 
| 115 | 
            -
             | 
| 116 | 
            -
            end
         |