responsys-api 0.0.3 → 0.0.4

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.
Files changed (64) hide show
  1. checksums.yaml +8 -8
  2. data/.gitignore +1 -0
  3. data/Gemfile +1 -1
  4. data/README.md +82 -10
  5. data/lib/responsys/api/all.rb +17 -0
  6. data/lib/responsys/api/campaign.rb +26 -0
  7. data/lib/responsys/api/client.rb +70 -0
  8. data/lib/responsys/api/folder.rb +25 -0
  9. data/lib/responsys/api/list.rb +39 -0
  10. data/lib/responsys/api/object/all.rb +11 -0
  11. data/lib/responsys/api/object/email_format.rb +23 -0
  12. data/lib/responsys/api/object/field.rb +20 -0
  13. data/lib/responsys/api/object/field_type.rb +23 -0
  14. data/lib/responsys/api/object/interact_object.rb +18 -0
  15. data/lib/responsys/api/object/list_merge_rule.rb +41 -0
  16. data/lib/responsys/api/object/optional_data.rb +23 -0
  17. data/lib/responsys/api/object/query_column.rb +23 -0
  18. data/lib/responsys/api/object/recipient.rb +30 -0
  19. data/lib/responsys/api/object/recipient_data.rb +21 -0
  20. data/lib/responsys/api/object/record.rb +19 -0
  21. data/lib/responsys/api/object/record_data.rb +31 -0
  22. data/lib/responsys/api/session.rb +30 -0
  23. data/lib/responsys/api/table.rb +49 -0
  24. data/lib/responsys/configuration.rb +3 -3
  25. data/lib/responsys/exceptions/all.rb +1 -0
  26. data/lib/responsys/exceptions/parameter_exception.rb +7 -0
  27. data/lib/responsys/helper.rb +78 -2
  28. data/lib/responsys/i18n/en.yml +20 -0
  29. data/lib/responsys/member.rb +80 -0
  30. data/lib/responsys_api.rb +11 -4
  31. data/responsys-api.gemspec +12 -9
  32. data/spec/api/campaign_spec.rb +27 -0
  33. data/spec/api/client_spec.rb +107 -0
  34. data/spec/api/list_spec.rb +71 -0
  35. data/spec/api/object/recipient_data_spec.rb +43 -0
  36. data/spec/api/object/recipient_spec.rb +68 -0
  37. data/spec/api/object/record_data_spec.rb +28 -0
  38. data/spec/api/table_spec.rb +111 -0
  39. data/spec/fixtures/vcr_cassettes/api/campaign/login.yml +940 -0
  40. data/spec/fixtures/vcr_cassettes/api/client/expired_session.yml +1030 -0
  41. data/spec/fixtures/vcr_cassettes/api/list/login.yml +982 -0
  42. data/spec/fixtures/vcr_cassettes/api/list/merge.yml +134 -0
  43. data/spec/fixtures/vcr_cassettes/api/list/retrieve.yml +46 -0
  44. data/spec/fixtures/vcr_cassettes/api/list/retrieve_single.yml +133 -0
  45. data/spec/fixtures/vcr_cassettes/api/list/retrieve_single_single.yml +45 -0
  46. data/spec/fixtures/vcr_cassettes/api/profile_extension/login.yml +982 -0
  47. data/spec/fixtures/vcr_cassettes/api/profile_extension/merge_profile_extension_records.yml +46 -0
  48. data/spec/fixtures/vcr_cassettes/api/profile_extension/retrieve_profile_extension_records.yml +45 -0
  49. data/spec/fixtures/vcr_cassettes/api/table/create.yml +45 -0
  50. data/spec/fixtures/vcr_cassettes/api/table/create_with_pk.yml +45 -0
  51. data/spec/fixtures/vcr_cassettes/api/table/delete.yml +45 -0
  52. data/spec/fixtures/vcr_cassettes/api/table/delete_with_pk.yml +45 -0
  53. data/spec/fixtures/vcr_cassettes/member/present1.yml +982 -0
  54. data/spec/fixtures/vcr_cassettes/member/present2.yml +45 -0
  55. data/spec/fixtures/vcr_cassettes/member/present3.yml +48 -0
  56. data/spec/fixtures/vcr_cassettes/member/present4.yml +48 -0
  57. data/spec/fixtures/vcr_cassettes/member/present5.yml +48 -0
  58. data/spec/fixtures/vcr_cassettes/member/retrieve_profile_extension.yml +87 -0
  59. data/spec/member_spec.rb +136 -0
  60. data/spec/spec_helper.rb +28 -2
  61. metadata +136 -19
  62. data/lib/responsys/responsys_api.rb +0 -41
  63. data/lib/savon/savon_api.rb +0 -22
  64. data/spec/responsys_api_spec.rb +0 -4
@@ -1,4 +1,11 @@
1
- require 'responsys/responsys_api'
2
- require 'responsys/configuration'
3
- require 'responsys/helper'
4
- require 'savon/savon_api'
1
+ require "i18n"
2
+
3
+ I18n.load_path << File.expand_path("../responsys/i18n/en.yml", __FILE__)
4
+ I18n.locale = :en
5
+ I18n.enforce_available_locales = false
6
+
7
+ require "responsys/exceptions/all"
8
+ require "responsys/helper"
9
+ require "responsys/configuration"
10
+ require "responsys/api/client"
11
+ require "responsys/member"
@@ -1,14 +1,14 @@
1
1
  # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
2
+ lib = File.expand_path("../lib", __FILE__)
3
3
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
 
5
5
  Gem::Specification.new do |spec|
6
6
  spec.name = "responsys-api"
7
- spec.version = "0.0.3"
7
+ spec.version = "0.0.4"
8
8
  spec.authors = ["Dan DeMeyere", "Florian Lorrain", "Morgan Griggs", "Mike Rocco"]
9
- spec.email = ["dan@thredup.com", "florain.lorrain@thredup.com", "morgan@thredup.com", "michael.rocco@thredup.com"]
10
- spec.description = 'A gem to integrate with the Responsys SOAP API'
11
- spec.summary = 'Write a proper summary'
9
+ spec.email = ["dan@thredup.com", "florian.lorrain@thredup.com", "morgan@thredup.com", "michael.rocco@thredup.com"]
10
+ spec.description = "A gem to integrate with the Responsys SOAP API"
11
+ spec.summary = "Write a proper summary"
12
12
  spec.homepage = "https://github.com/dandemeyere/responsys-api"
13
13
  spec.license = "MIT"
14
14
 
@@ -17,9 +17,12 @@ Gem::Specification.new do |spec|
17
17
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
18
18
  spec.require_paths = ["lib"]
19
19
 
20
- spec.add_dependency "rubyntlm", "~> 0.4.0"
21
- spec.add_dependency "savon", "~> 2.6.0"
20
+ spec.add_dependency "rubyntlm", "~> 0.4"
21
+ spec.add_dependency "savon", "~> 2.6"
22
+ spec.add_dependency "i18n", "~> 0.6"
22
23
  spec.add_development_dependency "bundler", "~> 1.3"
23
- spec.add_development_dependency "rake"
24
- spec.add_development_dependency 'rspec', '3.0.0'
24
+ spec.add_development_dependency "rake", "~> 10.3"
25
+ spec.add_development_dependency "rspec", "~> 3.0"
26
+ spec.add_development_dependency "vcr", "~> 2.5"
27
+ spec.add_development_dependency "webmock", "~> 1.9"
25
28
  end
@@ -0,0 +1,27 @@
1
+ require "spec_helper.rb"
2
+ require "responsys/api/client"
3
+
4
+ describe Responsys::Api::Campaign do
5
+
6
+ context "Trigger Message" do
7
+ before(:all) do
8
+ VCR.use_cassette("api/campaign/login") do
9
+ @client = Responsys::Api::Client.instance
10
+ end
11
+ end
12
+
13
+ before(:each) do
14
+ @campaign = Responsys::Api::Object::InteractObject.new("fake","fake")
15
+ @recipient = Responsys::Api::Object::Recipient.new(emailAddress: 'fake@thredup.com')
16
+ @recipientData = Responsys::Api::Object::RecipientData.new(@recipient)
17
+ end
18
+
19
+ it "should pass api_method a message Hash" do
20
+ VCR.use_cassette("api/campaign/login") do
21
+ expect(@client).to receive(:api_method).with(anything, be_a_kind_of(Hash))
22
+ @client.trigger_message(@campaign, [@recipientData])
23
+ end
24
+ end
25
+ end
26
+
27
+ end
@@ -0,0 +1,107 @@
1
+ require "spec_helper.rb"
2
+ require "responsys/api/client"
3
+ require "singleton"
4
+
5
+ describe Responsys::Api::Client do
6
+
7
+ context "expired session" do
8
+ before(:example) do
9
+ allow_any_instance_of(Responsys::Api::Client).to receive(:login).and_return(nil)
10
+
11
+ Responsys::Api::Client.instance.instance_variable_set(:@session_id, "fake_session_id")
12
+ Responsys::Api::Client.instance.instance_variable_set(:@jsession_id, HTTPI::Cookie.new("jsessionid=fakejsessionid; Path=/; HttpOnly"))
13
+ Responsys::Api::Client.instance.instance_variable_set(:@header, { SessionHeader: { sessionId: "fake_session_id" } })
14
+ end
15
+
16
+ it "should ask for a new session" do
17
+ VCR.use_cassette("api/client/expired_session") do
18
+ expect_any_instance_of(Responsys::Api::Client).to receive(:login).exactly(1).times.and_call_original
19
+ result = Responsys::Api::Client.instance.api_method(:list_folders)
20
+
21
+ expect(result[:status]).to eq("ok")
22
+ end
23
+ end
24
+
25
+ it "should rerun the request with a new session id" do
26
+ VCR.use_cassette("api/client/expired_session") do
27
+ expect_any_instance_of(Responsys::Api::Client).to receive(:login).exactly(1).times.and_call_original
28
+
29
+ expect(Responsys::Api::Client.instance.header[:SessionHeader][:sessionId]).to eq("fake_session_id")
30
+
31
+ Responsys::Api::Client.instance.api_method(:list_folders)
32
+
33
+ expect(Responsys::Api::Client.instance.header[:SessionHeader][:sessionId]).to eq("5GXdGHHKOLqsf4ukCpwQYz3B0b")
34
+ end
35
+ end
36
+
37
+ end
38
+
39
+ context "Authentication" do
40
+ let(:savon_client) { double("savon client") }
41
+
42
+ before(:context) do
43
+ @credentials = { username: "your_responsys_username", password: "your_responsys_password" }
44
+ end
45
+
46
+ after(:context) do
47
+ Singleton.__init__(Responsys::Api::Client)
48
+ end
49
+
50
+ it "should set the credentials" do
51
+ allow_any_instance_of(Responsys::Api::Client).to receive(:login).and_return(nil)
52
+
53
+ responsys = Responsys::Api::Client.instance
54
+
55
+ expect(responsys.credentials).to eq({ username: "your_responsys_username", password: "your_responsys_password" })
56
+ end
57
+
58
+ context "login" do
59
+ before(:example) do
60
+ response = double("response")
61
+
62
+ cookies = %w(fake_jsession_id)
63
+ body = {
64
+ login_response: {
65
+ result: {
66
+ session_id: "fake_session_id"
67
+ }
68
+ }
69
+ }
70
+
71
+ allow(response).to receive(:body).and_return(body)
72
+ allow(response).to receive(:http).and_return(double("cookies", cookies: cookies))
73
+
74
+ allow(Savon).to receive(:client).with({ wsdl: "https://wsxxxx.responsys.net/webservices/wsdl/ResponsysWS_Level1.wsdl", element_form_default: :qualified }).and_return(savon_client) #Avoid the verification of the wsdl
75
+ allow_any_instance_of(Responsys::Api::Client).to receive(:run).with("login", @credentials).and_return(response) #Verification of credentials
76
+ allow(savon_client).to receive(:call).with(:login, @credentials ).and_return(response) #Actual login call
77
+
78
+ Singleton.__init__(Responsys::Api::Client)
79
+ end
80
+
81
+ it "should set the session ids" do
82
+ instance = Responsys::Api::Client.instance #Get it
83
+
84
+ expect(instance.header).to eq({ SessionHeader: { sessionId: "fake_session_id" } }) #Test the ids are right
85
+ expect(instance.jsession_id).to eq("fake_jsession_id")
86
+ end
87
+ end
88
+
89
+ context "logout" do
90
+ before(:example) do
91
+ allow(Savon).to receive(:client).with({ wsdl: "https://wsxxxx.responsys.net/webservices/wsdl/ResponsysWS_Level1.wsdl", element_form_default: :qualified }).and_return(savon_client) #Avoid the verification of the wsdl
92
+ allow_any_instance_of(Responsys::Api::Client).to receive(:login).and_return(nil) #Avoid credentials checking
93
+
94
+ Singleton.__init__(Responsys::Api::Client)
95
+ end
96
+
97
+ it "should logout" do
98
+ instance = Responsys::Api::Client.instance #Get it
99
+
100
+ allow(Responsys::Helper).to receive(:format_response_hash).with(any_args) #We dont want to parse the response
101
+ expect(savon_client).to receive(:call).with(:logout, anything) #Check the call is actually being done
102
+
103
+ instance.logout
104
+ end
105
+ end
106
+ end
107
+ end
@@ -0,0 +1,71 @@
1
+ require "spec_helper.rb"
2
+
3
+ describe Responsys::Api::List do
4
+
5
+ before(:context) do
6
+ @list = Responsys::Api::Object::InteractObject.new("another_test_folder", "test_list")
7
+ @query_column_email = Responsys::Api::Object::QueryColumn.new("EMAIL_ADDRESS")
8
+ @multiple_users_email = %w(user@email.com user2@email.com user3@email.com)
9
+ @user1_email = "user@email.com"
10
+ @user1_mobile = "0000000001"
11
+ @user2_mobile = "0000000000"
12
+
13
+ VCR.use_cassette("api/list/login") do
14
+ Responsys::Api::Client.instance.login
15
+ end
16
+ end
17
+
18
+ context "Retrieve info from list with multiple users" do
19
+
20
+ it "should get a ok status" do
21
+ VCR.use_cassette("api/list/retrieve") do
22
+ response = Responsys::Api::Client.instance.retrieve_list_members(@list, @query_column_email, %w(EMAIL_ADDRESS_ MOBILE_NUMBER_), @multiple_users_email)
23
+
24
+ expect(response[:status]).to eq("ok")
25
+ end
26
+ end
27
+
28
+ it "should get a value from the data" do
29
+ VCR.use_cassette("api/list/retrieve") do
30
+ response = Responsys::Api::Client.instance.retrieve_list_members(@list, @query_column_email, %w(EMAIL_ADDRESS_ MOBILE_NUMBER_), @multiple_users_email)
31
+
32
+ expect(response[:data][2][:EMAIL_ADDRESS_]).to eq("user2@email.com")
33
+ end
34
+ end
35
+
36
+ it "should get a nil value" do
37
+ VCR.use_cassette("api/list/retrieve") do
38
+ response = Responsys::Api::Client.instance.retrieve_list_members(@list, @query_column_email, %w(EMAIL_ADDRESS_ MOBILE_NUMBER_), @multiple_users_email)
39
+
40
+ expect(response[:data][1][:MOBILE_NUMBER_]).to be(nil)
41
+ end
42
+ end
43
+
44
+ it "should return a single result" do
45
+ VCR.use_cassette("api/list/retrieve_single") do
46
+ response = Responsys::Api::Client.instance.retrieve_list_members(@list, @query_column_email, %w(EMAIL_ADDRESS_ MOBILE_NUMBER_), [@user1_email])
47
+
48
+ expect(response[:data][0][:EMAIL_ADDRESS_]).to eq(@user1_email)
49
+ end
50
+ end
51
+
52
+ it "should return a single field in a single record" do
53
+ VCR.use_cassette("api/list/retrieve_single_single") do
54
+ response = Responsys::Api::Client.instance.retrieve_list_members(@list, @query_column_email, %w(EMAIL_ADDRESS_), [@user1_email])
55
+
56
+ expect(response[:data][0][:EMAIL_ADDRESS_]).to eq(@user1_email)
57
+ end
58
+ end
59
+ end
60
+
61
+ context "Merge list members" do
62
+ it "should reject no record" do
63
+ VCR.use_cassette("api/list/merge") do
64
+ data = [{ Email_Address_: @user1_email, Mobile_Number_: @user1_mobile }, { Mobile_Number_: @user2_mobile, Customer_ID_: "" }]
65
+ response = Responsys::Api::Client.instance.merge_list_members(@list, Responsys::Api::Object::RecordData.new(data), merge_rule = Responsys::Api::Object::ListMergeRule.new(matchColumnName1: "Mobile_Number_"))
66
+
67
+ expect(response[:data][0][:result][:rejected_count].to_i).to eq(0)
68
+ end
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,43 @@
1
+ require "spec_helper.rb"
2
+ require "responsys/api/client"
3
+
4
+ describe Responsys::Api::Object::RecipientData do
5
+
6
+
7
+ context "new RecipientData" do
8
+
9
+ before(:each) do
10
+ @recipient = Responsys::Api::Object::Recipient.new
11
+ @recipient_data = Responsys::Api::Object::RecipientData.new(@recipient)
12
+ end
13
+
14
+ it "should have a recipient attribute of type Recipient" do
15
+ expect(@recipient_data.recipient).to be_a(Responsys::Api::Object::Recipient)
16
+ end
17
+
18
+ it "should have an optional_data attribute of type Array" do
19
+ expect(@recipient_data.optional_data).to be_a(Responsys::Api::Object::OptionalData)
20
+ end
21
+ end
22
+
23
+
24
+ context "RecipientData to_api method" do
25
+
26
+ before(:each) do
27
+ @recipient = Responsys::Api::Object::Recipient.new
28
+ @recipient_data = Responsys::Api::Object::RecipientData.new(@recipient)
29
+ end
30
+
31
+ it "should be of type Hash" do
32
+ expect(@recipient_data.to_api).to be_a(Hash)
33
+ end
34
+
35
+ it "should have a recipient attribute of type Hash" do
36
+ expect(@recipient_data.to_api[:recipient]).to be_a(Hash)
37
+ end
38
+
39
+ it "should have an optionalData attribute of type Array" do
40
+ expect(@recipient_data.to_api[:optionalData]).to be_a(Hash)
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,68 @@
1
+ require "spec_helper.rb"
2
+ require "responsys/api/client"
3
+
4
+ describe Responsys::Api::Object::Recipient do
5
+
6
+
7
+ context "new recipient" do
8
+
9
+ before(:each) do
10
+ @recipient = Responsys::Api::Object::Recipient.new
11
+ end
12
+
13
+ it "should have list_name attribute of type InteractObject" do
14
+ expect(@recipient.list_name).to be_a(Responsys::Api::Object::InteractObject)
15
+ end
16
+
17
+ it "should have recipient_id attribute" do
18
+ expect(@recipient.recipient_id).to be
19
+ end
20
+
21
+ it "should have customer_id attribute" do
22
+ expect(@recipient.customer_id).to be
23
+ end
24
+
25
+ it "should have email_address attribute" do
26
+ expect(@recipient.email_address).to be
27
+ end
28
+
29
+ it "should have mobile_number attribute" do
30
+ expect(@recipient.mobile_number).to be
31
+ end
32
+
33
+ it "should have email_format attribute of type EmailFormat" do
34
+ expect(@recipient.email_format).to be_a(Responsys::Api::Object::EmailFormat)
35
+ end
36
+ end
37
+
38
+ context "recipient to_api" do
39
+
40
+ before(:each) do
41
+ @recipient = Responsys::Api::Object::Recipient.new
42
+ end
43
+
44
+ it "should have listName attribute of type Hash" do
45
+ expect(@recipient.to_api[:listName]).to be_a(Hash)
46
+ end
47
+
48
+ it "should have recipientId attribute " do
49
+ expect(@recipient.to_api[:recipientId]).to be
50
+ end
51
+
52
+ it "should have customerId attribute " do
53
+ expect(@recipient.to_api[:customerId]).to be
54
+ end
55
+
56
+ it "should have emailAddress attribute " do
57
+ expect(@recipient.to_api[:emailAddress]).to be
58
+ end
59
+
60
+ it "should have mobileNumber attribute " do
61
+ expect(@recipient.to_api[:mobileNumber]).to be
62
+ end
63
+
64
+ it "should have EmailFormat attribute of type String" do
65
+ expect(@recipient.to_api[:emailFormat]).to be_a(String)
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,28 @@
1
+ require "spec_helper.rb"
2
+
3
+ describe Responsys::Api::Object::RecordData do
4
+
5
+ context "Constructor params handling" do
6
+ before(:each) do
7
+ @data = [{ field1: "value11", field2: "value12" }, { field2: "value22", field3: "value23" }]
8
+ @field_names = [:field1, :field2, :field3]
9
+ @record1 = ["value11", "value12", ""]
10
+ @record2 = ["", "value22", "value23"]
11
+
12
+ @object = Responsys::Api::Object::RecordData.new(@data)
13
+ end
14
+
15
+ it "should handle transform the constructor params" do
16
+ expect(@object.field_names).to eq(@field_names)
17
+ end
18
+
19
+ it "should transform correctly the object to the api representation" do
20
+ expect(@object.to_api).to eq({ fieldNames: @field_names, records: [{ fieldValues: @record1 }, { fieldValues: @record2 }] })
21
+ end
22
+
23
+ it "should raise an exception if the constructor parameter is not an array" do
24
+ expect{Responsys::Api::Object::RecordData.new("")}.to raise_exception(Responsys::Exceptions::ParameterException, "The data you provided is not an array")
25
+ end
26
+ end
27
+
28
+ end
@@ -0,0 +1,111 @@
1
+ require "spec_helper.rb"
2
+
3
+ describe Responsys::Api::Table do
4
+
5
+ before(:example) do
6
+ @profile_extension = Responsys::Api::Object::InteractObject.new("another_test_folder", "test_profile_extension")
7
+ @query_column_riid = Responsys::Api::Object::QueryColumn.new("RIID")
8
+ @query_column_email = Responsys::Api::Object::QueryColumn.new("EMAIL_ADDRESS")
9
+ @fields = %w(RIID_ EMAIL_ADDRESS)
10
+ @user_riid = 398426
11
+ @user_email = "user2@email.com"
12
+
13
+ VCR.use_cassette("api/profile_extension/login") do
14
+ Responsys::Api::Client.instance.login
15
+ end
16
+ end
17
+
18
+ context "create table" do
19
+ before(:all) do
20
+ @table = Responsys::Api::Object::InteractObject.new("another_test_folder", "table_#{Time.now.to_i}")
21
+ @table_with_pk = Responsys::Api::Object::InteractObject.new("another_test_folder", "table_with_pk_#{Time.now.to_i}")
22
+ end
23
+
24
+ it "should create a table" do
25
+ VCR.use_cassette("api/table/create") do
26
+ fields = [
27
+ Responsys::Api::Object::Field.new("field1", Responsys::Api::Object::FieldType.new("STR500"), custom = false, data_extraction_key = false),
28
+ Responsys::Api::Object::Field.new("field2", Responsys::Api::Object::FieldType.new("NUMBER"), custom = false, data_extraction_key = false),
29
+ Responsys::Api::Object::Field.new("field3", Responsys::Api::Object::FieldType.new("TIMESTAMP"), custom = false, data_extraction_key = false),
30
+ ]
31
+ response = Responsys::Api::Client.instance.create_table(@table, fields)
32
+
33
+ expect(response[:result]).to be(true)
34
+ end
35
+ end
36
+
37
+ it "should delete the previous table" do
38
+ VCR.use_cassette("api/table/delete") do
39
+ response = Responsys::Api::Client.instance.delete_table(@table)
40
+
41
+ expect(response[:result]).to be(true)
42
+ end
43
+ end
44
+
45
+ it "should create a table with pk" do
46
+ VCR.use_cassette("api/table/create_with_pk") do
47
+ fields = [
48
+ Responsys::Api::Object::Field.new("field1", Responsys::Api::Object::FieldType.new("STR500"), custom = false, data_extraction_key = false),
49
+ Responsys::Api::Object::Field.new("field2", Responsys::Api::Object::FieldType.new("NUMBER"), custom = false, data_extraction_key = false),
50
+ Responsys::Api::Object::Field.new("field3", Responsys::Api::Object::FieldType.new("TIMESTAMP"), custom = false, data_extraction_key = false),
51
+ ]
52
+ response = Responsys::Api::Client.instance.create_table_with_pk(@table_with_pk, fields, %w(field1))
53
+
54
+ expect(response[:result]).to be(true)
55
+ end
56
+ end
57
+
58
+ it "should delete the previous table with pk" do
59
+ VCR.use_cassette("api/table/delete_with_pk") do
60
+ response = Responsys::Api::Client.instance.delete_table(@table_with_pk)
61
+
62
+ expect(response[:result]).to be(true)
63
+ end
64
+ end
65
+ end
66
+
67
+ context "retrieve_profile_extension_records" do
68
+
69
+ it "should set the status to ok" do
70
+ VCR.use_cassette("api/profile_extension/retrieve_profile_extension_records") do
71
+ response = Responsys::Api::Client.instance.retrieve_profile_extension_records(@profile_extension, @query_column_riid, @fields, %W(#{@user_riid}))
72
+
73
+ expect(response[:status]).to eq("ok")
74
+ end
75
+ end
76
+
77
+ it "should return one record" do
78
+ VCR.use_cassette("api/profile_extension/retrieve_profile_extension_records") do
79
+ response = Responsys::Api::Client.instance.retrieve_profile_extension_records(@profile_extension, @query_column_riid, @fields, %W(#{@user_riid}))
80
+
81
+ expect(response[:data].length).to eq(1)
82
+ end
83
+ end
84
+
85
+ it "should return two key-value pairs" do
86
+ VCR.use_cassette("api/profile_extension/retrieve_profile_extension_records") do
87
+ response = Responsys::Api::Client.instance.retrieve_profile_extension_records(@profile_extension, @query_column_riid, @fields, %W(#{@user_riid}))
88
+
89
+ expect(response[:data][0].length).to eq(2)
90
+ end
91
+ end
92
+
93
+ it "should add (merge into) a profile extension member" do
94
+ VCR.use_cassette("api/profile_extension/merge_profile_extension_records") do
95
+ record_data = Responsys::Api::Object::RecordData.new([{EMAIL_ADDRESS_: @user_email, MONTHLY_PURCH: 3000}])
96
+ response = Responsys::Api::Client.instance.merge_into_profile_extension(@profile_extension, record_data, "EMAIL_ADDRESS", true)
97
+
98
+ expect(response[:status]).to eq("ok")
99
+ end
100
+ end
101
+
102
+ it "should delete a profile extension member" do
103
+ VCR.use_cassette("api/profile_extension/retrieve_profile_extension_records") do
104
+ response = Responsys::Api::Client.instance.delete_profile_extension_members(@profile_extension, @query_column_email, %W{#{@user_email}})
105
+
106
+ expect(response[:status]).to eq("ok")
107
+ end
108
+ end
109
+
110
+ end
111
+ end