howitzer 0.0.3 → 1.0.1

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 (81) hide show
  1. data/.gitignore +8 -0
  2. data/.rspec +3 -0
  3. data/.travis.yml +4 -0
  4. data/CHANGELOG.md +32 -0
  5. data/GETTING_STARTED.md +529 -0
  6. data/Gemfile +4 -2
  7. data/LICENSE +2 -2
  8. data/README.md +57 -13
  9. data/Rakefile +9 -2
  10. data/bin/howitzer +79 -31
  11. data/generators/base_generator.rb +87 -0
  12. data/generators/config/config_generator.rb +16 -20
  13. data/generators/config/templates/default.yml +26 -7
  14. data/generators/cucumber/cucumber_generator.rb +20 -26
  15. data/generators/{tasks → cucumber}/templates/cucumber.rake +0 -0
  16. data/generators/{config → cucumber}/templates/cucumber.yml +0 -0
  17. data/generators/emails/emails_generator.rb +11 -18
  18. data/generators/emails/templates/example_email.rb +1 -0
  19. data/generators/pages/pages_generator.rb +16 -18
  20. data/generators/pages/templates/example_menu.rb +1 -0
  21. data/generators/pages/templates/example_page.rb +1 -1
  22. data/generators/root/root_generator.rb +18 -20
  23. data/generators/root/templates/.gitignore +2 -1
  24. data/generators/root/templates/Gemfile +3 -2
  25. data/generators/root/templates/Rakefile +10 -0
  26. data/generators/root/templates/boot.rb +3 -9
  27. data/generators/rspec/rspec_generator.rb +23 -0
  28. data/generators/rspec/templates/example_spec.rb +7 -0
  29. data/generators/rspec/templates/rspec.rake +34 -0
  30. data/generators/rspec/templates/spec_helper.rb +56 -0
  31. data/generators/tasks/tasks_generator.rb +11 -17
  32. data/generators/tasks/templates/common.rake +15 -0
  33. data/howitzer.gemspec +13 -2
  34. data/lib/howitzer.rb +1 -0
  35. data/lib/howitzer/helpers.rb +87 -2
  36. data/lib/howitzer/init.rb +0 -1
  37. data/lib/howitzer/patches/rawler_patched.rb +86 -0
  38. data/lib/howitzer/settings.rb +27 -0
  39. data/lib/howitzer/utils.rb +3 -12
  40. data/lib/howitzer/utils/capybara_patched.rb +3 -2
  41. data/lib/howitzer/utils/capybara_settings.rb +158 -24
  42. data/lib/howitzer/utils/data_generator/data_storage.rb +35 -1
  43. data/lib/howitzer/utils/data_generator/gen.rb +45 -3
  44. data/lib/howitzer/utils/email/email.rb +44 -5
  45. data/lib/howitzer/utils/email/mail_client.rb +28 -22
  46. data/lib/howitzer/utils/email/mailgun_helper.rb +30 -4
  47. data/lib/howitzer/utils/locator_store.rb +111 -19
  48. data/lib/howitzer/utils/log.rb +137 -0
  49. data/lib/howitzer/utils/page_validator.rb +86 -0
  50. data/lib/howitzer/vendor/firebug-1.12.1-fx.xpi +0 -0
  51. data/lib/howitzer/vendor/firepath-0.9.7-fx.xpi +0 -0
  52. data/lib/howitzer/version.rb +2 -2
  53. data/lib/howitzer/web_page.rb +159 -19
  54. data/spec/active_resource.rb +0 -0
  55. data/spec/config/custom.yml +1 -0
  56. data/spec/config/default.yml +28 -0
  57. data/spec/spec_helper.rb +46 -1
  58. data/spec/support/boot_helper.rb +15 -0
  59. data/spec/support/generator_helper.rb +13 -0
  60. data/spec/support/logger_helper.rb +12 -0
  61. data/spec/unit/bin/howitzer_spec.rb +175 -0
  62. data/spec/unit/generators/generators_spec.rb +175 -0
  63. data/spec/unit/lib/capybara_settings_spec.rb +170 -0
  64. data/spec/unit/lib/helpers_spec.rb +619 -0
  65. data/spec/unit/lib/init_spec.rb +14 -0
  66. data/spec/unit/lib/settings_spec.rb +17 -0
  67. data/spec/unit/lib/utils/data_generator/data_storage_spec.rb +62 -0
  68. data/spec/unit/lib/utils/data_generator/gen_spec.rb +151 -0
  69. data/spec/unit/lib/utils/email/email_spec.rb +75 -0
  70. data/spec/unit/lib/utils/email/mail_client_spec.rb +115 -0
  71. data/spec/unit/lib/utils/email/mailgun_helper_spec.rb +95 -0
  72. data/spec/unit/lib/utils/locator_store_spec.rb +122 -0
  73. data/spec/unit/lib/utils/log_spec.rb +107 -0
  74. data/spec/unit/lib/utils/page_validator_spec.rb +142 -0
  75. data/spec/unit/lib/web_page_spec.rb +250 -0
  76. data/spec/unit/version_spec.rb +8 -0
  77. metadata +215 -15
  78. data/Gemfile.lock +0 -103
  79. data/History.md +0 -20
  80. data/lib/howitzer/utils/logger.rb +0 -108
  81. data/spec/howitzer/version_spec.rb +0 -8
@@ -0,0 +1,14 @@
1
+ require 'spec_helper'
2
+ require "#{lib_path}/howitzer/utils/data_generator/gen.rb"
3
+ require 'capybara/dsl'
4
+
5
+ describe "Helpers" do
6
+ before do
7
+ stub_const("Mailgun", double)
8
+ expect(settings).to receive(:mailgun_api_key){ 'some_api' }
9
+ end
10
+ it "should init Mailgun and include modules" do
11
+ expect(Mailgun).to receive(:init).with('some_api').once
12
+ require "#{lib_path}/howitzer/init.rb"
13
+ end
14
+ end
@@ -0,0 +1,17 @@
1
+ require 'spec_helper'
2
+
3
+ describe "Settings" do
4
+ context "#settings" do
5
+ subject { settings }
6
+ context "when method called two times" do
7
+ let(:other_settings) { settings }
8
+ it { expect(subject).to equal(other_settings) }
9
+ it { expect(other_settings).to be_a_kind_of(SexySettings::Base) }
10
+ end
11
+ end
12
+ context "SexySettings configuration" do
13
+ subject { SexySettings.configuration }
14
+ it { expect(subject.path_to_custom_settings).to include('config/custom.yml') }
15
+ it { expect(subject.path_to_default_settings).to include('config/default.yml') }
16
+ end
17
+ end
@@ -0,0 +1,62 @@
1
+ require 'spec_helper'
2
+ require "#{lib_path}/howitzer/utils/data_generator/data_storage"
3
+
4
+ describe "DataGenerator" do
5
+ describe "DataStorage" do
6
+ describe ".store" do
7
+ subject { DataGenerator::DataStorage.store(ns, 7, :halt) }
8
+ context "when namespace specified" do
9
+ let(:ns) { :user }
10
+ it "should return value" do
11
+ expect(subject).to eql(:halt)
12
+ end
13
+ it "should store namespace value" do
14
+ adata = DataGenerator::DataStorage.instance_variable_get(:@data)
15
+ expect(adata[:user]).to eql({7 => :halt})
16
+ end
17
+ end
18
+ context "when namespace empty" do
19
+ let(:ns) { nil }
20
+ it { expect {subject}.to raise_error(RuntimeError, "Data storage namespace can not be empty") }
21
+ end
22
+ end
23
+ describe ".extract" do
24
+ subject { DataGenerator::DataStorage.extract(ns, key) }
25
+ before { DataGenerator::DataStorage.instance_variable_set(:@data, {user: {7 => :exit}}) }
26
+ describe "when namespace specified" do
27
+ let(:ns) { :user }
28
+ context "and namespace key found" do
29
+ let(:key) { 7 }
30
+ it { expect(subject).to eql(:exit) }
31
+ end
32
+ context "and namespace key not found" do
33
+ let(:key) { 5 }
34
+ it { expect(subject).to be_nil }
35
+ end
36
+ context "but namespace key not specified" do
37
+ let(:key) { nil }
38
+ it { expect(subject).to eql({ 7 => :exit }) }
39
+ end
40
+ end
41
+ context "when namespace not found" do
42
+ let(:ns) { :guest }
43
+ let(:key) { 11 }
44
+ it { expect(subject).to be_nil }
45
+ end
46
+ context "when namespace not specified" do
47
+ let(:ns) { nil }
48
+ let(:key) { nil }
49
+ it { expect {subject}.to raise_error(RuntimeError, "Data storage namespace can not be empty") }
50
+ end
51
+ end
52
+ describe ".clear_ns" do
53
+ subject { DataGenerator::DataStorage.clear_ns(:user) }
54
+ before { DataGenerator::DataStorage.instance_variable_set(:@data, {user: {7 => :exit}}) }
55
+ it "should return empty hash" do
56
+ subject
57
+ adata = DataGenerator::DataStorage.instance_variable_get(:@data)
58
+ expect(adata[:user]).to eql({})
59
+ end
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,151 @@
1
+ require 'spec_helper'
2
+ require "#{lib_path}/howitzer/utils/data_generator/gen"
3
+
4
+ describe "DataGenerator" do
5
+ describe "Gen" do
6
+ describe ".user" do
7
+ subject { DataGenerator::Gen.user(params) }
8
+ before do
9
+ allow(settings).to receive(:def_test_pass) { 'test_pass' }
10
+ allow(settings).to receive(:mail_pop3_domain) { 'mail.com' }
11
+ allow(DataGenerator::Gen).to receive(:serial) { '012345678abcde' }
12
+ end
13
+ context "when params specified" do
14
+ let(:params) { { login: 'alex', password: 'pa$$w0rd', mailbox: 'member@test.com' } }
15
+ it { expect(subject).to be_an_instance_of DataGenerator::Gen::User }
16
+ it { expect(subject.email).to eql 'u012345678abcde@mail.com' }
17
+ it do
18
+ email_nm = subject.instance_variable_get(:@email_name)
19
+ expect(email_nm).to eql 'u012345678abcde'
20
+ end
21
+ it { expect(subject.domain).to eql 'mail.com' }
22
+ it { expect(subject.login).to eql 'alex' }
23
+ it { expect(subject.password).to eql 'pa$$w0rd' }
24
+ it { expect(subject.first_name).to eql 'FirstName012345678abcde' }
25
+ it { expect(subject.last_name).to eql 'LastName012345678abcde' }
26
+ it { expect(subject.mailbox).to eql 'member@test.com' }
27
+ end
28
+ context "with empty params" do
29
+ let(:params) { {} }
30
+ it { expect(subject).to be_an_instance_of DataGenerator::Gen::User }
31
+ it { expect(subject.email).to eql 'u012345678abcde@mail.com' }
32
+ it do
33
+ email_nm = subject.instance_variable_get(:@email_name)
34
+ expect(email_nm).to eql 'u012345678abcde'
35
+ end
36
+ it { expect(subject.domain).to eql 'mail.com' }
37
+ it { expect(subject.login).to eql 'u012345678abcde' }
38
+ it { expect(subject.password).to eql 'test_pass' }
39
+ it { expect(subject.first_name).to eql 'FirstName012345678abcde' }
40
+ it { expect(subject.last_name).to eql 'LastName012345678abcde' }
41
+ it { expect(subject.mailbox).to be_nil }
42
+ end
43
+ end
44
+ describe ".given_user_by_number" do
45
+ subject { DataGenerator::Gen.given_user_by_number(7) }
46
+ before { stub_const("DataGenerator::DataStorage", double) }
47
+ context "when namespace key found" do
48
+ before { expect(DataGenerator::DataStorage).to receive(:extract).with('user', 7) { :namespace_value } }
49
+ it { expect(subject).to eql(:namespace_value) }
50
+ end
51
+ context "when namespace key not found" do
52
+ let(:dat) { :data_store }
53
+ before do
54
+ allow(DataGenerator::Gen).to receive(:user) { dat }
55
+ expect(DataGenerator::DataStorage).to receive(:extract).with('user', 7) { nil }
56
+ allow(DataGenerator::DataStorage).to receive(:store).with('user', 7, dat)
57
+ end
58
+ it { expect(subject).to eql :data_store }
59
+ end
60
+ end
61
+ describe ".serial" do
62
+ subject { DataGenerator::Gen.serial }
63
+ let(:ser) { 1 }
64
+ context "received value should conform to template" do
65
+ let(:ser) { subject }
66
+ it { expect(ser).to match /\d{9}\w{5}/ }
67
+ end
68
+ context "received values should be different" do
69
+ it { expect(subject).to_not eql ser }
70
+ end
71
+ end
72
+ describe ".delete_all_mailboxes" do
73
+ subject { DataGenerator::Gen.delete_all_mailboxes }
74
+ let(:mbox1) { double }
75
+ let(:mbox2) { double }
76
+ before do
77
+ stub_const("DataGenerator::DataStorage", double)
78
+ expect(DataGenerator::DataStorage).to receive(:extract).with('user') { { 1 => mbox1, 2 => mbox2 } }
79
+ end
80
+ it do
81
+ expect(mbox1).to receive(:delete_mailbox).once
82
+ expect(mbox2).to receive(:delete_mailbox).once
83
+ subject
84
+ end
85
+ end
86
+ describe "User" do
87
+ describe "#initialize" do
88
+ subject { DataGenerator::Gen::User.new(params) }
89
+ let(:params) { { email: 'alex.petrenko@mail.com', login: 'alex', password: 'pa$$w0rd',
90
+ first_name: 'Alexey', last_name: 'Petrenko', mailbox: 'member@test.com' } }
91
+ it { expect(subject).to be_an_instance_of DataGenerator::Gen::User }
92
+ it { expect(subject.email).to eql 'alex.petrenko@mail.com' }
93
+ it do
94
+ email_nm = subject.instance_variable_get(:@email_name)
95
+ expect(email_nm).to eql 'alex.petrenko'
96
+ end
97
+ it { expect(subject.domain).to eql 'mail.com' }
98
+ it { expect(subject.login).to eql 'alex' }
99
+ it { expect(subject.password).to eql 'pa$$w0rd' }
100
+ it { expect(subject.first_name).to eql 'Alexey' }
101
+ it { expect(subject.last_name).to eql 'Petrenko' }
102
+ it { expect(subject.full_name).to eql 'Alexey Petrenko' }
103
+ it { expect(subject.mailbox).to eql 'member@test.com' }
104
+ end
105
+ describe "#create_mailbox" do
106
+ subject { nu_user.create_mailbox }
107
+ let(:nu_user) { DataGenerator::Gen::User.new({ email: 'alex.petrenko@mail.com', mailbox: 'member@test.com' }) }
108
+ before { stub_const('MailClient', double) }
109
+ context "should return User object" do
110
+ before do
111
+ allow(settings).to receive(:mail_pop3_domain) { 'mail.com' }
112
+ expect(MailClient).to receive(:create_mailbox).with('alex.petrenko').once { 'petrenko@test.com' }
113
+ end
114
+ it { expect(subject).to be_an_instance_of DataGenerator::Gen::User }
115
+ end
116
+ context "when mail_pop3_domain settings are equal to @domain" do
117
+ before do
118
+ allow(settings).to receive(:mail_pop3_domain) { 'mail.com' }
119
+ expect(MailClient).to receive(:create_mailbox).with('alex.petrenko').once { 'petrenko@test.com' }
120
+ end
121
+ it do
122
+ subject
123
+ expect(nu_user.mailbox).to eql 'petrenko@test.com'
124
+ end
125
+ end
126
+ context "when mail_pop3_domain settings are not equal to @domain" do
127
+ before { allow(settings).to receive(:mail_pop3_domain) { 'post.com' } }
128
+ it do
129
+ subject
130
+ expect(nu_user.mailbox).to eql 'member@test.com'
131
+ end
132
+ end
133
+ end
134
+ describe "#delete_mailbox" do
135
+ subject { nu_user.delete_mailbox }
136
+ let(:nu_user) { DataGenerator::Gen::User.new({ mailbox: mbox }) }
137
+ before { stub_const('MailClient', double) }
138
+ context "when mailbox spcified" do
139
+ before { expect(MailClient).to receive(:delete_mailbox).with(mbox).once { 'mailbox deleted' } }
140
+ let(:mbox) { 'member@test.com' }
141
+ it { expect(subject).to eql 'mailbox deleted' }
142
+ end
143
+ context "when mailbox not spcified" do
144
+ before { expect(MailClient).to_not receive(:delete_mailbox).with(mbox) }
145
+ let(:mbox) { nil }
146
+ it { expect(subject).to be_nil }
147
+ end
148
+ end
149
+ end
150
+ end
151
+ end
@@ -0,0 +1,75 @@
1
+ require "spec_helper"
2
+ require "#{lib_path}/howitzer/utils/log"
3
+ require "#{lib_path}/howitzer/utils/email/email"
4
+
5
+
6
+ describe Email do
7
+ let(:message) { double }
8
+ let(:message_subject) { 'test_subject' }
9
+ let(:mail_address) { double }
10
+ let(:recipient) { 'vasya@test.com' }
11
+ let(:email_object) { Email.new(message) }
12
+ before do
13
+ stub_const("Email::SUBJECT", 'test_subject')
14
+ stub_const("::Mail::Address", mail_address)
15
+ allow(mail_address).to receive(:new).with(recipient).and_return(mail_address)
16
+ allow(message).to receive(:to).and_return([recipient])
17
+ end
18
+
19
+ describe "#new" do
20
+ subject { Email.new(message) }
21
+ before { allow(message).to receive(:subject).and_return('test_subject') }
22
+ context "when subject is the same" do
23
+ it { expect(subject.instance_variable_get(:@recipient_address)).to eql(mail_address) }
24
+ it { expect(subject.instance_variable_get(:@message)).to eql(message) }
25
+ end
26
+ end
27
+
28
+ describe ".find_by_recipient" do
29
+ subject { Email.find_by_recipient(recipient) }
30
+ context "when 'recipient' specified " do
31
+ before { expect(Email).to receive(:find).with(recipient, 'test_subject').and_return(true).once }
32
+ it { expect(subject).to be_true }
33
+ end
34
+ context "when 'recipient' not specified " do
35
+ let(:recipient) { nil }
36
+ before { expect(Email).to receive(:find).with(recipient,'test_subject').and_return(nil).once }
37
+ it { expect(subject).to be_nil }
38
+ end
39
+ end
40
+
41
+ describe ".find" do
42
+ let(:mail_client) { double }
43
+ subject { Email.find('Vasya', 'Text') }
44
+ before do
45
+ stub_const("MailClient", double)
46
+ allow(MailClient).to receive(:by_email).and_return(mail_client)
47
+ allow(mail_client).to receive(:find_mail).and_return(messages )
48
+ allow(message).to receive(:subject).and_return('test_subject')
49
+ end
50
+ context "when messages.first present" do
51
+ let(:messages) { [message] }
52
+ it {expect(subject).to be_kind_of(Email) }
53
+ end
54
+
55
+ context "when messages.first not present" do
56
+ let(:messages) {[]}
57
+ it do
58
+ expect(log).to receive(:error).with("Email was not found (recipient: 'Vasya')").once
59
+ subject
60
+ end
61
+ end
62
+ end
63
+
64
+ describe "#plain_text_body" do
65
+ subject { email_object.plain_text_body }
66
+ let(:email_object) { Email.new(message) }
67
+ let(:mime_part) { double }
68
+ before do
69
+ allow(message).to receive(:subject).and_return('test_subject')
70
+ expect(mime_part).to receive(:to_s).and_return('test_string')
71
+ expect(email_object).to receive(:get_mime_part).with(message, 'text/plain').and_return(mime_part)
72
+ end
73
+ it { expect(subject).to eql('test_string') }
74
+ end
75
+ end
@@ -0,0 +1,115 @@
1
+ require "spec_helper"
2
+ require "#{lib_path}/howitzer/utils/log"
3
+ require "#{lib_path}/howitzer/utils/email/mail_client"
4
+
5
+ describe MailClient do
6
+
7
+ describe ".default" do
8
+ subject { MailClient.default }
9
+ it do
10
+ expect(log).to receive(:info).with("Connect to default mailbox").once
11
+ expect(subject).to be_instance_of(MailClient)
12
+ options = {
13
+ smtp: {
14
+ address: "smtp.demo.com",
15
+ port: 25,
16
+ domain: "demo.com",
17
+ user_name: "test_user",
18
+ password: "mypass",
19
+ authentication: "plain",
20
+ enable_starttls_auto: true
21
+ },
22
+ pop3: {
23
+ address: "pop.demo.com",
24
+ port: 995,
25
+ user_name: "test_user",
26
+ password: "mypass"
27
+ }
28
+ }
29
+ expect(subject.instance_variable_get(:@options)).to eql(options)
30
+ end
31
+ end
32
+
33
+ describe ".by_email" do
34
+ subject { MailClient.by_email("vasya@gmail.com") }
35
+ it do
36
+ expect(log).to receive(:info).with("Connect to 'vasya@gmail.com' mailbox").once
37
+ expect(subject).to be_instance_of(MailClient)
38
+ options = {
39
+ smtp: {
40
+ address: "smtp.demo.com",
41
+ port: 25,
42
+ domain: "demo.com",
43
+ user_name: "test_user",
44
+ password: "mypass",
45
+ authentication: "plain",
46
+ enable_starttls_auto: true
47
+ },
48
+ pop3: {
49
+ address: "pop.demo.com",
50
+ port: 995,
51
+ user_name: "vasya@gmail.com",
52
+ password: "mypass"
53
+ }
54
+ }
55
+ expect(subject.instance_variable_get(:@options)).to eql(options)
56
+ end
57
+ end
58
+
59
+ describe ".merge_opts" do
60
+ subject { MailClient.merge_opts(*options) }
61
+ context "when default options" do
62
+ let(:expected_option) do
63
+ {
64
+ smtp: {
65
+ address: "smtp.demo.com",
66
+ port: 25,
67
+ domain: "demo.com",
68
+ user_name: "test_user",
69
+ password: "mypass",
70
+ authentication: "plain",
71
+ enable_starttls_auto: true
72
+ },
73
+ pop3: {
74
+ address: "pop.demo.com",
75
+ port: 995,
76
+ user_name: "test_user",
77
+ password: "mypass"
78
+ }
79
+ }
80
+ end
81
+ let(:options) { [] }
82
+ it { expect(subject).to eql(expected_option) }
83
+ end
84
+ context "when custom options" do
85
+ let(:options) do
86
+ [{
87
+ smtp: {
88
+ address: 'fake_address',
89
+ port: 1123,
90
+ domain: 'fake_domain',
91
+ user_name: "fake_user_name",
92
+ password: "fake_password",
93
+ authentication: "plain",
94
+ enable_starttls_auto: true
95
+ },
96
+ pop3: {
97
+ address: "fake_address",
98
+ port: 999,
99
+ user_name: "fake_user_name",
100
+ password: "fake_password"
101
+ }
102
+ }]
103
+ end
104
+ it { expect(subject).to eql(options.first)}
105
+ end
106
+
107
+ describe "#find_mail"
108
+ describe "#send_mail"
109
+ describe "#empty_inbox"
110
+ describe "#start"
111
+ describe "constructor"
112
+
113
+ end
114
+
115
+ end
@@ -0,0 +1,95 @@
1
+ require 'spec_helper'
2
+ require "#{lib_path}/howitzer/utils/log"
3
+ require "#{lib_path}/howitzer/utils/email/mailgun_helper"
4
+
5
+ describe MailgunHelper do
6
+ let(:mailgun) { double.extend MailgunHelper }
7
+ let(:user_name) { 'vasyapupkin' }
8
+ let(:settings_obj) { double }
9
+ let(:mbox) { double }
10
+ before do
11
+ stub_const('Mailbox', double)
12
+ end
13
+ describe "#create_mailbox" do
14
+ subject { mailgun.create_mailbox(user_name, *opts) }
15
+ before do
16
+ expect(log).to receive(:info).with(log_message).once
17
+ allow(Mailbox).to receive(:new).and_return(mbox)
18
+ expect(mbox).to receive(:upsert).once
19
+ end
20
+ context "when domain and password are present" do
21
+ let(:log_message) { "Create 'vasyapupkin@mail.ru' mailbox" }
22
+ let(:opts) { ['mail.ru', '123'] }
23
+ it { expect(subject).to eql(mbox) }
24
+ end
25
+ context "when domain and password are missed" do
26
+ let(:opts) { [] }
27
+ let(:log_message) { "Create 'vasyapupkin@test.com' mailbox" }
28
+ before do
29
+ allow(mailgun).to receive(:settings).and_return(settings_obj)
30
+ allow(settings_obj).to receive(:mail_pop3_domain).and_return('test.com')
31
+ allow(settings_obj).to receive(:mail_pop3_user_pass).and_return('test123')
32
+ end
33
+ it { expect(subject).to eql(mbox) }
34
+ end
35
+ end
36
+
37
+ describe "#delete_mailbox" do
38
+ subject{ mailgun.delete_mailbox(mbox)}
39
+ before do
40
+ allow(mbox).to receive(:user).and_return('vasyapupkin')
41
+ allow(mbox).to receive(:domain).and_return('mail.ru')
42
+ expect(log).to receive(:info).with("Delete 'vasyapupkin@mail.ru' mailbox").once
43
+ end
44
+ context "when successful result" do
45
+ before {expect(Mailbox).to receive(:remove).with(mbox).and_return(true)}
46
+ it { expect(subject).to be_true }
47
+ end
48
+ context "when impossible to remove mailbox" do
49
+ before {expect(Mailbox).to receive(:remove).with(mbox).and_raise('Test error message')}
50
+ it do
51
+ expect(log).to receive(:warn).with("Unable to delete 'vasyapupkin' mailbox: Test error message")
52
+ subject
53
+ end
54
+ end
55
+ end
56
+
57
+ describe "#delete_all_mailboxes" do
58
+ let(:domain) { 'mail.ru' }
59
+ let(:mailbox1) do
60
+ m = double
61
+ allow(m).to receive(:id).and_return(1)
62
+ allow(m).to receive(:user).and_return('vasyapupkin')
63
+ allow(m).to receive(:domain).and_return(domain)
64
+ m
65
+ end
66
+ let(:mailbox2) do
67
+ m = double
68
+ allow(m).to receive(:id).and_return(2)
69
+ allow(m).to receive(:user).and_return('postmaster')
70
+ allow(m).to receive(:domain).and_return(domain)
71
+ m
72
+ end
73
+ let(:mailbox3) do
74
+ m = double
75
+ allow(m).to receive(:id).and_return(3)
76
+ allow(m).to receive(:user).and_return('admin')
77
+ allow(m).to receive(:domain).and_return(domain)
78
+ m
79
+ end
80
+ let(:mail_for_exception){ 'admin@mail.ru' }
81
+ subject{mailgun.delete_all_mailboxes(mail_for_exception)}
82
+ before do
83
+ allow(settings).to receive(:mail_smtp_domain).and_return("mail.ru")
84
+ allow(Mailbox).to receive(:find).with(:all).and_return([mailbox1, mailbox2, mailbox3])
85
+ end
86
+ it do
87
+ expect(log).to receive(:info).with("Delete all mailboxes except: \"admin@mail.ru\", \"postmaster@mail.ru\"")
88
+ expect(Mailbox).to receive(:delete).with(1).once
89
+ expect(Mailbox).to_not receive(:delete).with(2)
90
+ expect(Mailbox).to_not receive(:delete).with(3)
91
+ expect(log).to receive(:info).with("Were deleted '1' mailboxes")
92
+ subject
93
+ end
94
+ end
95
+ end