adtekio_adnetworks 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/Gemfile +24 -0
- data/README.md +333 -0
- data/Rakefile +56 -0
- data/VERSION +1 -0
- data/adtekio_adnetworks.gemspec +297 -0
- data/lib/adtekio_adnetworks.rb +6 -0
- data/lib/adtekio_adnetworks/api_key_scrapers.rb +59 -0
- data/lib/adtekio_adnetworks/api_key_scrapers/adcolony.rb +20 -0
- data/lib/adtekio_adnetworks/api_key_scrapers/applift.rb +13 -0
- data/lib/adtekio_adnetworks/api_key_scrapers/applovin.rb +13 -0
- data/lib/adtekio_adnetworks/api_key_scrapers/chartboost.rb +18 -0
- data/lib/adtekio_adnetworks/api_key_scrapers/crossinstall.rb +13 -0
- data/lib/adtekio_adnetworks/api_key_scrapers/leadbolt.rb +18 -0
- data/lib/adtekio_adnetworks/api_key_scrapers/loopme.rb +12 -0
- data/lib/adtekio_adnetworks/api_key_scrapers/mdotm.rb +22 -0
- data/lib/adtekio_adnetworks/api_key_scrapers/revmob.rb +22 -0
- data/lib/adtekio_adnetworks/api_key_scrapers/tapjoy.rb +19 -0
- data/lib/adtekio_adnetworks/api_key_scrapers/unilead.rb +13 -0
- data/lib/adtekio_adnetworks/api_key_scrapers/vungle.rb +23 -0
- data/lib/adtekio_adnetworks/importers.rb +58 -0
- data/lib/adtekio_adnetworks/importers/cost/adcolony.rb +43 -0
- data/lib/adtekio_adnetworks/importers/cost/adquant.rb +68 -0
- data/lib/adtekio_adnetworks/importers/cost/appia.rb +47 -0
- data/lib/adtekio_adnetworks/importers/cost/applifier.rb +64 -0
- data/lib/adtekio_adnetworks/importers/cost/applift.rb +41 -0
- data/lib/adtekio_adnetworks/importers/cost/applovin.rb +52 -0
- data/lib/adtekio_adnetworks/importers/cost/bidmotion.rb +82 -0
- data/lib/adtekio_adnetworks/importers/cost/chartboost.rb +40 -0
- data/lib/adtekio_adnetworks/importers/cost/crossinstall.rb +34 -0
- data/lib/adtekio_adnetworks/importers/cost/facebook.rb +39 -0
- data/lib/adtekio_adnetworks/importers/cost/fractionalmedia.rb +104 -0
- data/lib/adtekio_adnetworks/importers/cost/fyber.rb +54 -0
- data/lib/adtekio_adnetworks/importers/cost/gamegenetics.rb +44 -0
- data/lib/adtekio_adnetworks/importers/cost/glispa.rb +59 -0
- data/lib/adtekio_adnetworks/importers/cost/googleadwords.rb +99 -0
- data/lib/adtekio_adnetworks/importers/cost/jampp.rb +57 -0
- data/lib/adtekio_adnetworks/importers/cost/leadbolt.rb +43 -0
- data/lib/adtekio_adnetworks/importers/cost/lifestreet.rb +49 -0
- data/lib/adtekio_adnetworks/importers/cost/loopme.rb +63 -0
- data/lib/adtekio_adnetworks/importers/cost/matomy.rb +65 -0
- data/lib/adtekio_adnetworks/importers/cost/mdotm.rb +69 -0
- data/lib/adtekio_adnetworks/importers/cost/mmg.rb +67 -0
- data/lib/adtekio_adnetworks/importers/cost/mnectar.rb +45 -0
- data/lib/adtekio_adnetworks/importers/cost/moboqo.rb +33 -0
- data/lib/adtekio_adnetworks/importers/cost/mobpartner.rb +46 -0
- data/lib/adtekio_adnetworks/importers/cost/nanigans.rb +114 -0
- data/lib/adtekio_adnetworks/importers/cost/revmob.rb +44 -0
- data/lib/adtekio_adnetworks/importers/cost/rtbmob.rb +48 -0
- data/lib/adtekio_adnetworks/importers/cost/startapp.rb +47 -0
- data/lib/adtekio_adnetworks/importers/cost/supersonic.rb +77 -0
- data/lib/adtekio_adnetworks/importers/cost/tapjoy.rb +42 -0
- data/lib/adtekio_adnetworks/importers/cost/tokenads.rb +46 -0
- data/lib/adtekio_adnetworks/importers/cost/unilead.rb +39 -0
- data/lib/adtekio_adnetworks/importers/cost/vungle.rb +58 -0
- data/lib/adtekio_adnetworks/importers/cost_import.rb +13 -0
- data/lib/adtekio_adnetworks/importers/revenue/adcolony.rb +67 -0
- data/lib/adtekio_adnetworks/importers/revenue/applifier.rb +55 -0
- data/lib/adtekio_adnetworks/importers/revenue/applovin.rb +58 -0
- data/lib/adtekio_adnetworks/importers/revenue/chartboost.rb +43 -0
- data/lib/adtekio_adnetworks/importers/revenue/flurry.rb +85 -0
- data/lib/adtekio_adnetworks/importers/revenue/fyber.rb +61 -0
- data/lib/adtekio_adnetworks/importers/revenue/hypr_mx.rb +69 -0
- data/lib/adtekio_adnetworks/importers/revenue/lifestreet.rb +59 -0
- data/lib/adtekio_adnetworks/importers/revenue/mdotm.rb +38 -0
- data/lib/adtekio_adnetworks/importers/revenue/mopub.rb +54 -0
- data/lib/adtekio_adnetworks/importers/revenue/nexage.rb +71 -0
- data/lib/adtekio_adnetworks/importers/revenue/supersonic.rb +73 -0
- data/lib/adtekio_adnetworks/importers/revenue/tapsense.rb +38 -0
- data/lib/adtekio_adnetworks/importers/revenue/trialpay.rb +41 -0
- data/lib/adtekio_adnetworks/importers/revenue/vungle.rb +75 -0
- data/lib/adtekio_adnetworks/importers/revenue_import.rb +27 -0
- data/lib/adtekio_adnetworks/postbacks.rb +193 -0
- data/lib/adtekio_adnetworks/postbacks/aarki.rb +17 -0
- data/lib/adtekio_adnetworks/postbacks/adaction.rb +18 -0
- data/lib/adtekio_adnetworks/postbacks/adcash.rb +19 -0
- data/lib/adtekio_adnetworks/postbacks/adcolony.rb +90 -0
- data/lib/adtekio_adnetworks/postbacks/adgorithms.rb +74 -0
- data/lib/adtekio_adnetworks/postbacks/adjapon_nend.rb +39 -0
- data/lib/adtekio_adnetworks/postbacks/adknowledge.rb +18 -0
- data/lib/adtekio_adnetworks/postbacks/admob.rb +17 -0
- data/lib/adtekio_adnetworks/postbacks/adp.rb +18 -0
- data/lib/adtekio_adnetworks/postbacks/adperio.rb +19 -0
- data/lib/adtekio_adnetworks/postbacks/adquant.rb +39 -0
- data/lib/adtekio_adnetworks/postbacks/adstract.rb +15 -0
- data/lib/adtekio_adnetworks/postbacks/adxperience.rb +16 -0
- data/lib/adtekio_adnetworks/postbacks/airpush.rb +17 -0
- data/lib/adtekio_adnetworks/postbacks/app_chocolate.rb +17 -0
- data/lib/adtekio_adnetworks/postbacks/appfload.rb +17 -0
- data/lib/adtekio_adnetworks/postbacks/appia.rb +18 -0
- data/lib/adtekio_adnetworks/postbacks/appintheair.rb +17 -0
- data/lib/adtekio_adnetworks/postbacks/applifier.rb +49 -0
- data/lib/adtekio_adnetworks/postbacks/applift.rb +88 -0
- data/lib/adtekio_adnetworks/postbacks/applovin.rb +127 -0
- data/lib/adtekio_adnetworks/postbacks/appnext.rb +17 -0
- data/lib/adtekio_adnetworks/postbacks/appredeem.rb +33 -0
- data/lib/adtekio_adnetworks/postbacks/appsfire.rb +19 -0
- data/lib/adtekio_adnetworks/postbacks/appturbo.rb +18 -0
- data/lib/adtekio_adnetworks/postbacks/apsalar.rb +21 -0
- data/lib/adtekio_adnetworks/postbacks/bee7.rb +17 -0
- data/lib/adtekio_adnetworks/postbacks/bidmotion.rb +80 -0
- data/lib/adtekio_adnetworks/postbacks/blindferretmedia.rb +17 -0
- data/lib/adtekio_adnetworks/postbacks/chartboost.rb +116 -0
- data/lib/adtekio_adnetworks/postbacks/cheetah.rb +32 -0
- data/lib/adtekio_adnetworks/postbacks/clickky.rb +30 -0
- data/lib/adtekio_adnetworks/postbacks/covus.rb +17 -0
- data/lib/adtekio_adnetworks/postbacks/crossinstall.rb +26 -0
- data/lib/adtekio_adnetworks/postbacks/cyberagent_ameba.rb +17 -0
- data/lib/adtekio_adnetworks/postbacks/cyberagent_amoad.rb +17 -0
- data/lib/adtekio_adnetworks/postbacks/cyberagent_imobile.rb +43 -0
- data/lib/adtekio_adnetworks/postbacks/cyberagent_kjnw.rb +17 -0
- data/lib/adtekio_adnetworks/postbacks/cyberagent_maio.rb +18 -0
- data/lib/adtekio_adnetworks/postbacks/cyberagent_nend.rb +40 -0
- data/lib/adtekio_adnetworks/postbacks/cyberagent_smartc.rb +17 -0
- data/lib/adtekio_adnetworks/postbacks/cyberagent_smartnews.rb +17 -0
- data/lib/adtekio_adnetworks/postbacks/cyberz_asta.rb +26 -0
- data/lib/adtekio_adnetworks/postbacks/cyberz_bead.rb +26 -0
- data/lib/adtekio_adnetworks/postbacks/cyberz_imobile.rb +28 -0
- data/lib/adtekio_adnetworks/postbacks/cyberz_nend.rb +30 -0
- data/lib/adtekio_adnetworks/postbacks/datalead.rb +17 -0
- data/lib/adtekio_adnetworks/postbacks/eccrine.rb +80 -0
- data/lib/adtekio_adnetworks/postbacks/eeline.rb +50 -0
- data/lib/adtekio_adnetworks/postbacks/f5.rb +30 -0
- data/lib/adtekio_adnetworks/postbacks/fiksu.rb +43 -0
- data/lib/adtekio_adnetworks/postbacks/fiksu_applift.rb +31 -0
- data/lib/adtekio_adnetworks/postbacks/fractionalmedia.rb +78 -0
- data/lib/adtekio_adnetworks/postbacks/fyber.rb +36 -0
- data/lib/adtekio_adnetworks/postbacks/gamegenetics.rb +17 -0
- data/lib/adtekio_adnetworks/postbacks/ginga.rb +26 -0
- data/lib/adtekio_adnetworks/postbacks/glispa.rb +96 -0
- data/lib/adtekio_adnetworks/postbacks/googleadwords.rb +19 -0
- data/lib/adtekio_adnetworks/postbacks/growmobile.rb +36 -0
- data/lib/adtekio_adnetworks/postbacks/heyzap.rb +51 -0
- data/lib/adtekio_adnetworks/postbacks/inmobi.rb +50 -0
- data/lib/adtekio_adnetworks/postbacks/inneractive.rb +17 -0
- data/lib/adtekio_adnetworks/postbacks/instal.rb +18 -0
- data/lib/adtekio_adnetworks/postbacks/iqu.rb +19 -0
- data/lib/adtekio_adnetworks/postbacks/ironsource.rb +19 -0
- data/lib/adtekio_adnetworks/postbacks/jampp.rb +48 -0
- data/lib/adtekio_adnetworks/postbacks/jestadigital.rb +18 -0
- data/lib/adtekio_adnetworks/postbacks/jumpramp.rb +17 -0
- data/lib/adtekio_adnetworks/postbacks/jumptap.rb +23 -0
- data/lib/adtekio_adnetworks/postbacks/leadbolt.rb +29 -0
- data/lib/adtekio_adnetworks/postbacks/lifestreet.rb +97 -0
- data/lib/adtekio_adnetworks/postbacks/liftoff.rb +66 -0
- data/lib/adtekio_adnetworks/postbacks/loopme.rb +17 -0
- data/lib/adtekio_adnetworks/postbacks/magic_solver.rb +18 -0
- data/lib/adtekio_adnetworks/postbacks/marimedia.rb +20 -0
- data/lib/adtekio_adnetworks/postbacks/matomy.rb +59 -0
- data/lib/adtekio_adnetworks/postbacks/mdotm.rb +116 -0
- data/lib/adtekio_adnetworks/postbacks/misterbell.rb +18 -0
- data/lib/adtekio_adnetworks/postbacks/mmg.rb +20 -0
- data/lib/adtekio_adnetworks/postbacks/mnectar.rb +22 -0
- data/lib/adtekio_adnetworks/postbacks/moblin.rb +17 -0
- data/lib/adtekio_adnetworks/postbacks/moboqo.rb +17 -0
- data/lib/adtekio_adnetworks/postbacks/mobpartner.rb +19 -0
- data/lib/adtekio_adnetworks/postbacks/mopub.rb +30 -0
- data/lib/adtekio_adnetworks/postbacks/motive_interactive.rb +32 -0
- data/lib/adtekio_adnetworks/postbacks/mundo.rb +17 -0
- data/lib/adtekio_adnetworks/postbacks/nanigans.rb +38 -0
- data/lib/adtekio_adnetworks/postbacks/nativex.rb +30 -0
- data/lib/adtekio_adnetworks/postbacks/neodau.rb +19 -0
- data/lib/adtekio_adnetworks/postbacks/neverblue.rb +19 -0
- data/lib/adtekio_adnetworks/postbacks/operamedia.rb +39 -0
- data/lib/adtekio_adnetworks/postbacks/pandora.rb +17 -0
- data/lib/adtekio_adnetworks/postbacks/phunware.rb +18 -0
- data/lib/adtekio_adnetworks/postbacks/pirasin.rb +16 -0
- data/lib/adtekio_adnetworks/postbacks/playhaven.rb +31 -0
- data/lib/adtekio_adnetworks/postbacks/pocketmath.rb +17 -0
- data/lib/adtekio_adnetworks/postbacks/propeller.rb +18 -0
- data/lib/adtekio_adnetworks/postbacks/quixey.rb +17 -0
- data/lib/adtekio_adnetworks/postbacks/realzeit.rb +60 -0
- data/lib/adtekio_adnetworks/postbacks/remerge.rb +66 -0
- data/lib/adtekio_adnetworks/postbacks/revmob.rb +17 -0
- data/lib/adtekio_adnetworks/postbacks/ripple.rb +18 -0
- data/lib/adtekio_adnetworks/postbacks/roostr.rb +17 -0
- data/lib/adtekio_adnetworks/postbacks/rtbcom.rb +28 -0
- data/lib/adtekio_adnetworks/postbacks/septeni.rb +17 -0
- data/lib/adtekio_adnetworks/postbacks/seven_games.rb +51 -0
- data/lib/adtekio_adnetworks/postbacks/startapp.rb +48 -0
- data/lib/adtekio_adnetworks/postbacks/supersonic.rb +19 -0
- data/lib/adtekio_adnetworks/postbacks/tapjoy.rb +36 -0
- data/lib/adtekio_adnetworks/postbacks/taptica.rb +21 -0
- data/lib/adtekio_adnetworks/postbacks/targetcircle.rb +41 -0
- data/lib/adtekio_adnetworks/postbacks/todacell.rb +18 -0
- data/lib/adtekio_adnetworks/postbacks/tokenads.rb +18 -0
- data/lib/adtekio_adnetworks/postbacks/trademob.rb +48 -0
- data/lib/adtekio_adnetworks/postbacks/trademob_magic_solver.rb +22 -0
- data/lib/adtekio_adnetworks/postbacks/trialpay.rb +18 -0
- data/lib/adtekio_adnetworks/postbacks/unilead.rb +78 -0
- data/lib/adtekio_adnetworks/postbacks/uppsmobi.rb +19 -0
- data/lib/adtekio_adnetworks/postbacks/vungle.rb +33 -0
- data/lib/adtekio_adnetworks/postbacks/w4.rb +17 -0
- data/lib/adtekio_adnetworks/postbacks/webmedia.rb +17 -0
- data/lib/adtekio_adnetworks/postbacks/yahoo.rb +20 -0
- data/lib/adtekio_adnetworks/postbacks/youappi.rb +116 -0
- data/lib/adtekio_adnetworks/postbacks/zemail.rb +19 -0
- data/test/helper.rb +78 -0
- data/test/unit/postbacks/test_chartboost.rb +105 -0
- data/test/unit/postbacks/test_mdotm.rb +35 -0
- data/test/unit/postbacks/test_playhaven.rb +76 -0
- data/test/unit/postbacks/test_trademob_magic_solver.rb +24 -0
- data/test/unit/postbacks/test_unilead.rb +67 -0
- data/test/unit/test_api_key_scrapers.rb +302 -0
- data/test/unit/test_base_postback_class.rb +82 -0
- data/test/unit/test_cost_importers.rb +12 -0
- data/test/unit/test_postbacks.rb +33 -0
- data/test/unit/test_postbacks_definition.rb +111 -0
- data/test/unit/test_revenue_importers.rb +12 -0
- metadata +500 -0
@@ -0,0 +1,67 @@
|
|
1
|
+
require File.dirname(File.expand_path(__FILE__)) + '/../../helper.rb'
|
2
|
+
|
3
|
+
module Postbacks
|
4
|
+
class TestUnilead < Minitest::Test
|
5
|
+
def test_klazz
|
6
|
+
AdtekioAdnetworks::Postbacks::Unilead
|
7
|
+
end
|
8
|
+
|
9
|
+
context "different urls depending on devices - testing 'check'" do
|
10
|
+
should "have different urls for conversion events" do
|
11
|
+
assert_equal 2, test_klazz.mac(:ios).size
|
12
|
+
|
13
|
+
params = os(:device => "ipad")
|
14
|
+
obj = instance_with_event(nil, :params => params)
|
15
|
+
assert_equal 1, obj.mac(:ios).size
|
16
|
+
assert_match /SP1AB/, obj.mac(:ios).first[:url]
|
17
|
+
|
18
|
+
params = os(:device => "iphone")
|
19
|
+
obj = instance_with_event(nil, :params => params)
|
20
|
+
assert_equal 1, obj.mac(:ios).size
|
21
|
+
assert_match /SP2M0/, obj.mac(:ios).first[:url]
|
22
|
+
end
|
23
|
+
|
24
|
+
should "have different urls for funnel events" do
|
25
|
+
assert_equal 2, test_klazz.fun(:ios).size
|
26
|
+
|
27
|
+
params = os(:device => "ipad")
|
28
|
+
obj = instance_with_event(nil, :params => params)
|
29
|
+
assert_equal 0, obj.fun(:ios).size
|
30
|
+
|
31
|
+
params = os(:device => "iphone")
|
32
|
+
obj = instance_with_event(nil, :params => params)
|
33
|
+
assert_equal 0, obj.fun(:ios).size
|
34
|
+
|
35
|
+
params = os(:device => "ipad", :funnel_step => "tutorial_complete")
|
36
|
+
user = os(:click_data => {'click' => "trans_id"})
|
37
|
+
obj = instance_with_event(nil, :params => params, :user => user)
|
38
|
+
|
39
|
+
assert_equal 1, obj.fun(:ios).size
|
40
|
+
assert_match /GP2b9.*trans_id/, obj.fun(:ios).first[:url]
|
41
|
+
|
42
|
+
params = os({:device => "iphone", :funnel_step => "tutorial_complete"})
|
43
|
+
obj = instance_with_event(nil, :params => params, :user => user)
|
44
|
+
assert_equal 1, obj.fun(:ios).size
|
45
|
+
assert_match /GP2bF.*trans_id/, obj.fun(:ios).first[:url]
|
46
|
+
end
|
47
|
+
|
48
|
+
should "have different urls for payment events" do
|
49
|
+
assert_equal 2, test_klazz.pay(:ios).size
|
50
|
+
|
51
|
+
params = os(:device => "ipad")
|
52
|
+
user = os(:click_data => {'click' => "trans_id"})
|
53
|
+
event = os(:revenue => "revenue")
|
54
|
+
obj = instance_with_event(event, :params => params, :user => user)
|
55
|
+
|
56
|
+
assert_equal 1, obj.pay(:ios).size
|
57
|
+
assert_match /GP2bL.*revenue.*trans_id.*/, obj.pay(:ios).first[:url]
|
58
|
+
|
59
|
+
params = os(:device => "iphone")
|
60
|
+
obj = instance_with_event(event, :params => params, :user => user)
|
61
|
+
|
62
|
+
assert_equal 1, obj.pay(:ios).size
|
63
|
+
assert_match /GP2bR.*revenue.*trans_id.*/, obj.pay(:ios).first[:url]
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,302 @@
|
|
1
|
+
require File.dirname(File.expand_path(__FILE__)) + '/../helper.rb'
|
2
|
+
|
3
|
+
class TestApiKeyScrapers < Minitest::Test
|
4
|
+
def define_mock_agent(&block)
|
5
|
+
mock = Object.new.tap { |o| yield(o) }
|
6
|
+
@scraper.instance_variable_set("@agent", mock)
|
7
|
+
end
|
8
|
+
|
9
|
+
context "base api scraper class" do
|
10
|
+
setup do
|
11
|
+
@scraper = AdtekioAdnetworks::ApiKeyScrapers.new
|
12
|
+
end
|
13
|
+
|
14
|
+
should "send the right method" do
|
15
|
+
mock(@scraper).key_for_banana { "apple" }
|
16
|
+
assert_equal "apple", @scraper.obtain_key_for("banana", {})
|
17
|
+
end
|
18
|
+
|
19
|
+
should "have working get_and_match that returns match contents" do
|
20
|
+
mock(@scraper)._g("url") { os(:content => "match this") }
|
21
|
+
|
22
|
+
assert_equal "this", @scraper.send(:get_and_match, "url", /match (.+)/)
|
23
|
+
end
|
24
|
+
|
25
|
+
should "return nil if no match when using get_and_match" do
|
26
|
+
mock(@scraper)._g("url") { os(:content => "dontmatch! this") }
|
27
|
+
|
28
|
+
assert_nil @scraper.send(:get_and_match, "url", /match (.+)/)
|
29
|
+
end
|
30
|
+
|
31
|
+
should "have a working post_and_match" do
|
32
|
+
mock(@scraper)._p("url",{}) { os(:content => "match this") }
|
33
|
+
|
34
|
+
assert_equal("this",
|
35
|
+
@scraper.send(:post_and_match, "url", {}, /match (.+)/))
|
36
|
+
end
|
37
|
+
|
38
|
+
should "not match and return nil when using post_and_match" do
|
39
|
+
mock(@scraper)._p("url",{}) { os(:content => "dontmatch! this") }
|
40
|
+
|
41
|
+
assert_nil @scraper.send(:post_and_match, "url", {}, /match (.+)/)
|
42
|
+
end
|
43
|
+
|
44
|
+
should "have working enter_login_details" do
|
45
|
+
{ "work" =>
|
46
|
+
[ os({ :name => "email", :value => nil}),
|
47
|
+
os({ :name => "password", :value => nil})],
|
48
|
+
"case insensitive" =>
|
49
|
+
[ os({ :name => "EmAiL", :value => nil}),
|
50
|
+
os({ :name => "PassWord", :value => nil})],
|
51
|
+
"password can be written passwd" =>
|
52
|
+
[ os({ :name => "EmAiL", :value => nil}),
|
53
|
+
os({ :name => "PassWd", :value => nil})]
|
54
|
+
}.each do |test_name, fields|
|
55
|
+
msg = "Failed for #{test_name}"
|
56
|
+
form = os(:fields => fields)
|
57
|
+
|
58
|
+
params = { "username" => "username", "password" => "password"}
|
59
|
+
@scraper.instance_variable_set("@params", params)
|
60
|
+
|
61
|
+
assert_equal form, @scraper.send(:enter_login_details, form), msg
|
62
|
+
assert_equal "username", fields.first.value, msg
|
63
|
+
assert_equal "password", fields.last.value, msg
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
context "specific scrapers" do
|
69
|
+
setup do
|
70
|
+
@scraper = AdtekioAdnetworks::ApiKeyScrapers.new
|
71
|
+
end
|
72
|
+
|
73
|
+
should "have working adcolony" do
|
74
|
+
params = { "username" => "username", "password" => "password"}
|
75
|
+
mock(@scraper).get_and_match("https://clients.adcolony.com/login",
|
76
|
+
/_csrf.:.([^"]+)"/) { "csrf_token" }
|
77
|
+
data = {
|
78
|
+
"_csrf" => "csrf_token",
|
79
|
+
"email" => params["username"],
|
80
|
+
"password" => params["password"]
|
81
|
+
}
|
82
|
+
|
83
|
+
mock(@scraper).post_and_match("https://clients.adcolony.com/login",data,
|
84
|
+
/single_access_token.:.([^"]+)"/) {"token"}
|
85
|
+
|
86
|
+
assert_equal({:token => "token"},
|
87
|
+
@scraper.obtain_key_for("adcolony",params))
|
88
|
+
end
|
89
|
+
|
90
|
+
should "have working applift" do
|
91
|
+
forms = os( :forms => ["empty_form"])
|
92
|
+
mock(@scraper)._g("https://partner.applift.com") { forms }
|
93
|
+
|
94
|
+
login_page = os(:submit => "")
|
95
|
+
mock(@scraper).enter_login_details("empty_form") { login_page }
|
96
|
+
|
97
|
+
mock(@scraper).
|
98
|
+
get_and_match("https://partner.applift.com/stats/stats_api",
|
99
|
+
/Your API Key .+ <i>([^ ]+)[<]/) { "token" }
|
100
|
+
|
101
|
+
assert_equal({:token => "token"},
|
102
|
+
@scraper.obtain_key_for("applift",{}))
|
103
|
+
end
|
104
|
+
|
105
|
+
should "have working applovin" do
|
106
|
+
forms = os( :forms => ["empty_form"])
|
107
|
+
mock(@scraper)._g("https://www.applovin.com/login") { forms }
|
108
|
+
|
109
|
+
login_page = os(:submit => "")
|
110
|
+
mock(@scraper).enter_login_details("empty_form") { login_page }
|
111
|
+
|
112
|
+
page = Object.new.tap do |o|
|
113
|
+
mock(o).search("input[id=report_key]") do
|
114
|
+
[os(:attributes => {"value" => os(:value => "token")})]
|
115
|
+
end
|
116
|
+
end
|
117
|
+
mock(@scraper)._g("https://www.applovin.com/account") { page }
|
118
|
+
|
119
|
+
assert_equal({:token => "token"},
|
120
|
+
@scraper.obtain_key_for("applovin",{}))
|
121
|
+
end
|
122
|
+
|
123
|
+
should "have working chartboost" do
|
124
|
+
params = { "username" => "username", "password" => "password"}
|
125
|
+
|
126
|
+
define_mock_agent do |o|
|
127
|
+
mock(o).post("https://dashapi.chartboost.com/v3/login", {
|
128
|
+
"email" => params["username"],
|
129
|
+
"password" => params["password"]})
|
130
|
+
end
|
131
|
+
page = os(:content => { "response" => { "user_id" => "user_id",
|
132
|
+
"user_signature" => "user_signature"}}.to_json)
|
133
|
+
mock(@scraper)._g("https://dashapi.chartboost.com/v3/"+
|
134
|
+
"companies?with=money%2users,ounts") { page }
|
135
|
+
|
136
|
+
assert_equal({"user_id"=>"user_id", "signature"=>"user_signature"},
|
137
|
+
@scraper.obtain_key_for("chartboost",params))
|
138
|
+
end
|
139
|
+
|
140
|
+
should "have working crossinstall" do
|
141
|
+
forms = os( :forms => ["empty_form"])
|
142
|
+
mock(@scraper)._g("https://secure.crossinstall.com/login") { forms }
|
143
|
+
|
144
|
+
mock_search = Object.new.tap do |o|
|
145
|
+
mock(o).search("input[name=api_key]") do
|
146
|
+
[os(:attributes => {"value" => os(:value => "token")})]
|
147
|
+
end
|
148
|
+
end
|
149
|
+
mock_content = Object.new.tap do |o|
|
150
|
+
mock(o).link_with(:text => " API Key") { os(:click => mock_search) }
|
151
|
+
end
|
152
|
+
details_page = os(:submit => mock_content)
|
153
|
+
mock(@scraper).enter_login_details("empty_form") { details_page }
|
154
|
+
|
155
|
+
assert_equal({:token => "token"},
|
156
|
+
@scraper.obtain_key_for("crossinstall",{}))
|
157
|
+
end
|
158
|
+
|
159
|
+
should "have working leadbolt" do
|
160
|
+
forms = os( :forms => ["empty_form"])
|
161
|
+
mock(@scraper)._g("https://www.leadboltnetwork.net/advertiser/login") do
|
162
|
+
forms
|
163
|
+
end
|
164
|
+
login_page = os(:submit => "")
|
165
|
+
mock(@scraper).enter_login_details("empty_form") { login_page }
|
166
|
+
|
167
|
+
page = Object.new.tap do |o|
|
168
|
+
mock(o).search("div p[class=form-control-static]").times(2) do
|
169
|
+
[os(:text => "advertiser_id"), os(:text => "secret_key")]
|
170
|
+
end
|
171
|
+
end
|
172
|
+
mock(@scraper)._g("https://www.leadboltnetwork.net/a/"+
|
173
|
+
"account/accountsettings") { page }
|
174
|
+
|
175
|
+
assert_equal({"secret_key"=>"secret_key",
|
176
|
+
"advertiser_id"=>"advertiser_id"},
|
177
|
+
@scraper.obtain_key_for("leadbolt",{}))
|
178
|
+
end
|
179
|
+
|
180
|
+
should "have working loopme" do
|
181
|
+
forms = os( :forms => ["empty_form"])
|
182
|
+
mock(@scraper)._g("https://loopme.me/login") { forms }
|
183
|
+
login_page = os(:submit => "")
|
184
|
+
mock(@scraper).enter_login_details("empty_form") { login_page }
|
185
|
+
|
186
|
+
search_results = [os(:children => [os(:text => "token")])]
|
187
|
+
settings_page = Object.new.tap do |o|
|
188
|
+
mock(o).search("span[id=api_auth_token]") { search_results }
|
189
|
+
end
|
190
|
+
mock(@scraper)._g("https://loopme.me/account/settings") { settings_page }
|
191
|
+
|
192
|
+
assert_equal({:token => "token"}, @scraper.obtain_key_for("loopme",{}))
|
193
|
+
end
|
194
|
+
|
195
|
+
should "have working mdotm" do
|
196
|
+
forms = os( :forms => ["empty_form"])
|
197
|
+
mock(@scraper)._g("https://platform.mdotm.com/app/login") { forms }
|
198
|
+
|
199
|
+
content = <<-EOF
|
200
|
+
AccountID.*<code>AccountId<\/code>
|
201
|
+
Your API Key.*<code>APIKEY<\/code>
|
202
|
+
Your Secret Key.*<code>SECRETKEY<\/code>
|
203
|
+
EOF
|
204
|
+
|
205
|
+
profile_page = os(:click => os({:content => content}))
|
206
|
+
mock_page = Object.new.tap do |o|
|
207
|
+
mock(o).link_with(:text => "Your Profile") { profile_page }
|
208
|
+
end
|
209
|
+
|
210
|
+
page = os(:submit => mock_page)
|
211
|
+
mock(@scraper).enter_login_details("empty_form") { page }
|
212
|
+
|
213
|
+
assert_equal({"account_id"=>"AccountId", "token"=>"APIKEY",
|
214
|
+
"secret_key"=>"SECRETKEY"},
|
215
|
+
@scraper.obtain_key_for("mdotm",{}))
|
216
|
+
end
|
217
|
+
|
218
|
+
should "have working revmob" do
|
219
|
+
params = { "username" => "username", "password" => "password"}
|
220
|
+
page = os(:content => {
|
221
|
+
"user_id" => "user_id",
|
222
|
+
"auth_token" => "auth_token"}.to_json)
|
223
|
+
|
224
|
+
define_mock_agent do |o|
|
225
|
+
mock(o).post("https://www.revmobmobileadnetwork.com/home/signIn", {
|
226
|
+
"emailSignIn" => params["username"],
|
227
|
+
"pass" => params["password"],
|
228
|
+
"originalUrl" => "/users/session/new"})
|
229
|
+
|
230
|
+
mock(o).post("https://www.revmobmobileadnetwork.com/myMedias", {
|
231
|
+
"countEnable" => "false",
|
232
|
+
"filterText" => "",
|
233
|
+
"limitEnd" => 15,
|
234
|
+
"limitStart" => 15}) { page }
|
235
|
+
end
|
236
|
+
|
237
|
+
assert_equal({ "user_id" => "user_id", "auth_token" => "auth_token"},
|
238
|
+
@scraper.obtain_key_for("revmob",params))
|
239
|
+
end
|
240
|
+
|
241
|
+
should "have working tapjoy" do
|
242
|
+
params = { "username" => "username", "password" => "password"}
|
243
|
+
page = os(:content => {"link" => "link"}.to_json)
|
244
|
+
|
245
|
+
define_mock_agent do |o|
|
246
|
+
mock(o).post("https://dashboard.tapjoy.com/api/client/v1/session", {
|
247
|
+
"_method" => "put",
|
248
|
+
"username" => params["username"],
|
249
|
+
"password" => params["password"]}) { page }
|
250
|
+
end
|
251
|
+
|
252
|
+
mock(@scraper).get_and_match("link/d",/User Id., "([^"]+)"/) {"user_id"}
|
253
|
+
mock(@scraper).
|
254
|
+
_g("https://dashboard.tapjoy.com/api/client/users/user_id") do
|
255
|
+
os(:content => {"result" => {"user" =>
|
256
|
+
{"api_key" => "api_key"}}}.to_json)
|
257
|
+
end
|
258
|
+
|
259
|
+
assert_equal({ :token => "api_key"},
|
260
|
+
@scraper.obtain_key_for("tapjoy",params))
|
261
|
+
end
|
262
|
+
|
263
|
+
should "have working unilead" do
|
264
|
+
mock(@scraper)._g("http://my.unileadnetwork.com/") do
|
265
|
+
os(:forms => ["fubar"])
|
266
|
+
end
|
267
|
+
mock(@scraper).enter_login_details('fubar') do
|
268
|
+
os(:submit => "donothing")
|
269
|
+
end
|
270
|
+
|
271
|
+
mock(@scraper).
|
272
|
+
get_and_match("http://my.unileadnetwork.com/stats/stats_api",
|
273
|
+
/Your API Key .+ <i>([^ ]+)[<]/) { "token" }
|
274
|
+
|
275
|
+
assert_equal({ :token => "token"}, @scraper.obtain_key_for("unilead",{}))
|
276
|
+
end
|
277
|
+
|
278
|
+
should "have working vungle" do
|
279
|
+
params = { "username" => "username", "password" => "password"}
|
280
|
+
|
281
|
+
define_mock_agent do |o|
|
282
|
+
mock(o).post("https://v.vungle.com/dashboard/login", {
|
283
|
+
"_csrf" => "csrf_token",
|
284
|
+
"email" => params["username"],
|
285
|
+
"password" => params["password"]})
|
286
|
+
end
|
287
|
+
|
288
|
+
mock(@scraper).get_and_match("https://v.vungle.com/dashboard/login",
|
289
|
+
/id="csrf" value="([^"]+)"/) {"csrf_token"}
|
290
|
+
mock(@scraper).get_and_match("https://v.vungle.com/dashboard/reports",
|
291
|
+
/"account":."_id":"([^"]+)"/) {"account_id"}
|
292
|
+
|
293
|
+
mock(@scraper)._g("https://v.vungle.com/dashboard/api/1/"+
|
294
|
+
"accounts/account_id/users") do
|
295
|
+
os(:content => [{ "secretKey" => "secret_key"}].to_json)
|
296
|
+
end
|
297
|
+
|
298
|
+
assert_equal({:token=>"secret_key"},
|
299
|
+
@scraper.obtain_key_for("vungle",params))
|
300
|
+
end
|
301
|
+
end
|
302
|
+
end
|
@@ -0,0 +1,82 @@
|
|
1
|
+
require File.dirname(File.expand_path(__FILE__)) + '/../helper.rb'
|
2
|
+
|
3
|
+
class TestBasePostbackClass < Minitest::Test
|
4
|
+
context "helper methods" do
|
5
|
+
setup do
|
6
|
+
@obj = AdtekioAdnetworks::BasePostbackClass.new(nil,nil,nil,nil)
|
7
|
+
end
|
8
|
+
|
9
|
+
should "have sha1 method" do
|
10
|
+
assert_equal("9ab50f27d4201db9b28483ba83c48ebafbb2aa17",
|
11
|
+
@obj.sha1("fubar"))
|
12
|
+
end
|
13
|
+
|
14
|
+
should "have muidify" do
|
15
|
+
assert_equal("UYXouP2KcfyAVF4UT5H68g", @obj.muidify("fubar"))
|
16
|
+
end
|
17
|
+
|
18
|
+
should "have parse_string" do
|
19
|
+
assert_equal "nothing", @obj.parse_string("nothing")
|
20
|
+
str = "[@{@event}@,<%= @params %>,@{netcfg}@]"
|
21
|
+
assert_equal("[,,]", @obj.parse_string(str))
|
22
|
+
end
|
23
|
+
|
24
|
+
should "have should_handle method" do
|
25
|
+
assert_equal true, @obj.should_handle?(OpenStruct.new)
|
26
|
+
|
27
|
+
cfg = os(:check => "false")
|
28
|
+
assert_equal false, @obj.should_handle?(cfg)
|
29
|
+
|
30
|
+
cfg = os(:check => :method_not_defined)
|
31
|
+
assert_raises NoMethodError do
|
32
|
+
@obj.should_handle?(cfg)
|
33
|
+
end
|
34
|
+
|
35
|
+
cfg = os(:check => :return_true)
|
36
|
+
@obj.instance_eval do
|
37
|
+
def return_true
|
38
|
+
true
|
39
|
+
end
|
40
|
+
end
|
41
|
+
assert_equal true, @obj.should_handle?(cfg)
|
42
|
+
cfg = os(:check => 'self.return_true')
|
43
|
+
assert_equal true, @obj.should_handle?(cfg)
|
44
|
+
cfg = os(:check => 'return_true')
|
45
|
+
assert_equal true, @obj.should_handle?(cfg)
|
46
|
+
end
|
47
|
+
|
48
|
+
should "have a contains_eruby method" do
|
49
|
+
{ "@{fubar}@" => true,
|
50
|
+
"<% fubar %>" => true,
|
51
|
+
"<%= fubar %>" => true,
|
52
|
+
"<%? fubar %>" => true,
|
53
|
+
"<%? fubar ?>" => false,
|
54
|
+
"<? fubar ?>" => false,
|
55
|
+
"@{fubar}?" => false,
|
56
|
+
'#{fubar}?' => false,
|
57
|
+
}.each do |str, exp|
|
58
|
+
assert_equal exp, @obj.contains_eruby?(str), "Failed for #{str}"
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
should "have either_hash_or_symbol_to_string" do
|
63
|
+
@obj.instance_eval do
|
64
|
+
def return_hello_world
|
65
|
+
"hello world"
|
66
|
+
end
|
67
|
+
end
|
68
|
+
assert_equal("hello world",
|
69
|
+
@obj.either_hash_or_symbol_to_string(:return_hello_world))
|
70
|
+
assert_equal("hello world",
|
71
|
+
@obj.either_hash_or_symbol_to_string("hello world"))
|
72
|
+
|
73
|
+
assert_equal("", @obj.either_hash_or_symbol_to_string({}))
|
74
|
+
hsh = {
|
75
|
+
:param1 => "one",
|
76
|
+
:param2 => "two"
|
77
|
+
}
|
78
|
+
assert_equal("param1=one¶m2=two",
|
79
|
+
@obj.either_hash_or_symbol_to_string(hsh))
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|