webspicy 0.20.11 → 0.20.16

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7eba5a8dc97e7c8f2053da2c52e45d728d1de38777ac2088db74aa2852f0ab8a
4
- data.tar.gz: dfd0330f95b8c9e64b63919820b7b48ba1dc0f4a7696ba03877670f41a8812b3
3
+ metadata.gz: 7a8de4780fb659f78ce0f61cebc61abed9ab6206a45c953bff95071a67761ee7
4
+ data.tar.gz: 8258fbb268baddb39d4549540484816aefde696a41a6166bf3cbe45d6bdf9912
5
5
  SHA512:
6
- metadata.gz: 243d021ca1344f09880a3fbda147c38dbacb8791c3e8f541acb524992f6c3e15bb997fbb4423b06c504c95f7a85079fa24d329379b8368cc0b04b11a0a0ab028
7
- data.tar.gz: 47a7462b3b080b276f594b0b1df054488fa69c60038c51d2d22a664aeb83ada0c390380de1497a30d0f990bd97638fbc3acdfc636eb8fbe227e37d3c1512f6f0
6
+ metadata.gz: 434f5a5616992040d25c7fefd9c483ff622b96a5f71c59a1efeb3ac72ab37d6329e3e941b6487ff68ca18648e52848d9ce58dc78d7f44dcfc73bba486131c81d
7
+ data.tar.gz: 7aca5fd9abb963b086ccd2d0d9e80c1f783d5cafb0f691760545dfe6689f87419197daca678c03027f3c4eb2fc145896d18d2e1c823e115531903585389a862c
@@ -22,7 +22,7 @@ module Webspicy
22
22
  def _each_specification_file(config, apply_filter = true)
23
23
  folder = config.folder
24
24
  world = config.folder/"world"
25
- fs = folder.glob("**/*.yml").reject{|f| f.to_s.start_with?(world.to_s) }
25
+ fs = folder.glob("**/*.{yml, yaml}").reject{|f| f.to_s.start_with?(world.to_s) }
26
26
  fs = fs.sort
27
27
  fs = fs.select(&to_filter_proc(config.file_filter)) if apply_filter
28
28
  fs.each do |file|
@@ -9,13 +9,32 @@ module Webspicy
9
9
  attr_reader :data
10
10
 
11
11
  def from
12
- @from ||= data["from"]["email"]
12
+ @from ||= data['from']['name'] ?
13
+ "#{data['from']['name']} <#{data['from']['email']}>" :
14
+ data['from']['email']
13
15
  end
14
16
 
15
17
  def to
16
18
  @to ||= data["personalizations"]
17
19
  .select{|h| h.key? "to" }
18
20
  .map{|(h)| h["to"] }
21
+ .flatten
22
+ .map{|(h)| h["email"] }
23
+ end
24
+
25
+ def cc
26
+ @cc ||= data["personalizations"]
27
+ .select{|h| h.key? "cc" }
28
+ .map{|(h)| h["cc"] }
29
+ .flatten
30
+ .map{|(h)| h["email"] }
31
+ end
32
+
33
+ def bcc
34
+ @bcc ||= data["personalizations"]
35
+ .select{|h| h.key? "bcc" }
36
+ .map{|(h)| h["bcc"] }
37
+ .flatten
19
38
  .map{|(h)| h["email"] }
20
39
  end
21
40
 
@@ -1,3 +1,5 @@
1
+ require 'mail'
2
+
1
3
  module Webspicy
2
4
  class Tester
3
5
  class Fakeses
@@ -9,23 +11,36 @@ module Webspicy
9
11
  attr_reader :data
10
12
 
11
13
  def from
12
- data["body"]["Source"]
14
+ email.from[0]
13
15
  end
14
16
 
15
- def to
17
+ def recipients
16
18
  data["body"]
17
19
  .each_pair
18
20
  .select{|(k,v)|
19
21
  k =~ /Destinations.member/
20
22
  }
21
- .map{|(k,v)| v }
23
+ .map{|(k,v)| v.strip }
24
+ end
25
+
26
+ def to
27
+ email.to || []
22
28
  end
23
29
 
24
30
  def subject
25
- rx = /^Subject:\s*(.*)$/
26
- raw_data
27
- .each_line
28
- .find{|l| l =~ rx }[rx, 1]
31
+ email.subject
32
+ end
33
+
34
+ def cc
35
+ email.cc || []
36
+ end
37
+
38
+ def bcc
39
+ recipients - cc - to
40
+ end
41
+
42
+ def email
43
+ @email ||= Mail.read_from_string(raw_data)
29
44
  end
30
45
 
31
46
  def raw_data
@@ -16,9 +16,13 @@ module Webspicy
16
16
  end
17
17
 
18
18
  def to
19
- @to ||= data["headerLines"]
20
- .select{|h| h["key"] == "to" }
21
- .map{|h| h["line"][/To:\s*(.*)$/, 1] }
19
+ @to ||= data["to"]["value"]
20
+ .map{|h| h["address"] }
21
+ end
22
+
23
+ def cc
24
+ @cc ||= data["cc"]["value"]
25
+ .map{|h| h["address"] }
22
26
  end
23
27
 
24
28
  def reply_to
@@ -2,7 +2,7 @@ module Webspicy
2
2
  module Version
3
3
  MAJOR = 0
4
4
  MINOR = 20
5
- TINY = 11
5
+ TINY = 16
6
6
  end
7
7
  VERSION = "#{Version::MAJOR}.#{Version::MINOR}.#{Version::TINY}"
8
8
  end
@@ -18,7 +18,7 @@ module Webspicy
18
18
  }
19
19
 
20
20
  it 'returns all files' do
21
- expect(subject.size).to eql(restful_folder.glob('**/*.yml').size)
21
+ expect(subject.size).to eql(restful_folder.glob('**/*.{yml, yaml}').size)
22
22
  end
23
23
  end
24
24
 
@@ -59,7 +59,7 @@ module Webspicy
59
59
  }
60
60
 
61
61
  it 'returns all files' do
62
- expect(subject.size).to eql(restful_folder.glob('**/*.yml').size)
62
+ expect(subject.size).to eql(restful_folder.glob('**/*.{yml, yaml}').size)
63
63
  end
64
64
  end
65
65
 
@@ -9,15 +9,28 @@ module Webspicy
9
9
  {
10
10
  "datetime": "2021-06-02T15:29:27.161Z",
11
11
  "from": {
12
- "email": "info@mydomain.be",
13
- "name": "Foo Bar"
12
+ "email": "noreply@webspicy.io",
13
+ "name": "Webspicy"
14
14
  },
15
15
  "subject": "Hello World",
16
16
  "personalizations": [
17
17
  {
18
18
  "to": [
19
19
  {
20
- "email": "support@mydomain.fr"
20
+ "email": "someone@world.com"
21
+ },
22
+ {
23
+ "email": "someoneelse@world.com"
24
+ }
25
+ ],
26
+ "cc": [
27
+ {
28
+ "email": "a-cc-recipient@world.com"
29
+ }
30
+ ],
31
+ "bcc": [
32
+ {
33
+ "email": "a-bcc-recipient@world.com"
21
34
  }
22
35
  ]
23
36
  }
@@ -40,8 +53,10 @@ module Webspicy
40
53
  }
41
54
 
42
55
  it 'works as expected' do
43
- expect(subject.from).to eql("info@mydomain.be")
44
- expect(subject.to).to eql(["support@mydomain.fr"])
56
+ expect(subject.from).to eql("Webspicy <noreply@webspicy.io>")
57
+ expect(subject.to).to eql(["someone@world.com", "someoneelse@world.com"])
58
+ expect(subject.cc).to eql(["a-cc-recipient@world.com"])
59
+ expect(subject.bcc).to eql(["a-bcc-recipient@world.com"])
45
60
  expect(subject.subject).to eql("Hello World")
46
61
  end
47
62
 
@@ -6,9 +6,27 @@ module Webspicy
6
6
  describe Email do
7
7
 
8
8
  DATA = Base64.encode64 <<~J
9
- From: Webspicy <noreply@webspicy.io>
10
- To: someone@world.com
11
- Subject: Hey world, hello!
9
+ Content-Type: multipart/alternative;
10
+ boundary="--_NmP-d246fd025a6652c9-Part_1"
11
+ From: Webspicy <noreply@webspicy.io>
12
+ To: someone@world.com, someoneelse@world.com
13
+ CC: a-cc-recipient@world.com
14
+ Subject: Hey world, hello!
15
+ Message-ID: <2421bae3-9c42-7988-23b4-b1f6168130c9@webspicy.io>
16
+ Date: Thu, 24 Jun 2021 13:45:16 +0000
17
+ MIME-Version: 1.0
18
+
19
+ ----_NmP-d246fd025a6652c9-Part_1
20
+ Content-Type: text/plain; charset=utf-8
21
+ Content-Transfer-Encoding: 7bit
22
+
23
+ Hello world, in a text version
24
+ ----_NmP-d246fd025a6652c9-Part_1
25
+ Content-Type: text/html; charset=utf-8
26
+ Content-Transfer-Encoding: 7bit
27
+
28
+ Hello world, in an html version
29
+ ----_NmP-d246fd025a6652c9-Part_1--
12
30
  J
13
31
 
14
32
  DATA = JSON.parse <<~J
@@ -17,6 +35,9 @@ module Webspicy
17
35
  "body": {
18
36
  "Source": "noreply@webspicy.io",
19
37
  "Destinations.member.1": "someone@world.com",
38
+ "Destinations.member.2": "someoneelse@world.com",
39
+ "Destinations.member.3": "a-cc-recipient@world.com",
40
+ "Destinations.member.4": "a-bcc-recipient@world.com",
20
41
  "RawMessage.Data": "#{DATA.gsub /\n/, ''}",
21
42
  "Action": "SendRawEmail",
22
43
  "Version": "2010-12-01"
@@ -30,7 +51,9 @@ module Webspicy
30
51
 
31
52
  it 'works as expected' do
32
53
  expect(subject.from).to eql("noreply@webspicy.io")
33
- expect(subject.to).to eql(["someone@world.com"])
54
+ expect(subject.to).to eql(["someone@world.com", "someoneelse@world.com"])
55
+ expect(subject.cc).to eql(["a-cc-recipient@world.com"])
56
+ expect(subject.bcc).to eql(["a-bcc-recipient@world.com"])
34
57
  expect(subject.subject).to eql("Hey world, hello!")
35
58
  end
36
59
 
@@ -15,15 +15,19 @@ module Webspicy
15
15
  },
16
16
  {
17
17
  "key": "from",
18
- "line": "From: info@mydomain.be"
18
+ "line": "From: Webspicy <noreply@webspicy.io>"
19
19
  },
20
20
  {
21
21
  "key": "reply-to",
22
- "line": "Reply-To: test@email.be"
22
+ "line": "Reply-To: noreply@webspicy.io"
23
23
  },
24
24
  {
25
25
  "key": "to",
26
- "line": "To: support@mydomain.fr"
26
+ "line": "To: someone@world.com, someoneelse@world.com"
27
+ },
28
+ {
29
+ "key": "cc",
30
+ "line": "Cc: a-cc-recipient@world.com"
27
31
  },
28
32
  {
29
33
  "key": "message-id",
@@ -46,12 +50,14 @@ module Webspicy
46
50
  "to": {
47
51
  "value": [
48
52
  {
49
- "address": "support@mydomain.fr",
53
+ "address": "someone@world.com",
54
+ "name": ""
55
+ },
56
+ {
57
+ "address": "someoneelse@world.com",
50
58
  "name": ""
51
59
  }
52
- ],
53
- "html": "<span class=\\"mp_address_group\\"><a href=\\"mailto:support@mydomain.fr\\" class=\\"mp_address_email\\">support@mydomain.fr</a></span>",
54
- "text": "support@mydomain.fr"
60
+ ]
55
61
  },
56
62
  "from": {
57
63
  "value": [
@@ -59,20 +65,24 @@ module Webspicy
59
65
  "address": "info@mydomain.be",
60
66
  "name": ""
61
67
  }
62
- ],
63
- "html": "<span class=\\"mp_address_group\\"><a href=\\"mailto:info@mydomain.be\\" class=\\"mp_address_email\\">info@mydomain.be</a></span>",
64
- "text": "info@mydomain.be"
68
+ ]
65
69
  },
66
70
  "messageId": "<607edfd56836e_1b0492af@1d3356d02030.mail>",
67
71
  "replyTo": {
68
72
  "value": [
69
73
  {
70
- "address": "test@email.be",
74
+ "address": "noreply@webspicy.io",
75
+ "name": ""
76
+ }
77
+ ]
78
+ },
79
+ "cc": {
80
+ "value": [
81
+ {
82
+ "address": "a-cc-recipient@world.com",
71
83
  "name": ""
72
84
  }
73
- ],
74
- "html": "<span class=\\"mp_address_group\\"><a href=\\"mailto:test@email.be\\" class=\\"mp_address_email\\">test@email.be</a></span>",
75
- "text": "test@email.be"
85
+ ]
76
86
  }
77
87
  }
78
88
  J
@@ -82,8 +92,9 @@ module Webspicy
82
92
  }
83
93
 
84
94
  it 'works as expected' do
85
- expect(subject.from).to eql("info@mydomain.be")
86
- expect(subject.to).to eql(["support@mydomain.fr"])
95
+ expect(subject.from).to eql("Webspicy <noreply@webspicy.io>")
96
+ expect(subject.to).to eql(["someone@world.com", "someoneelse@world.com"])
97
+ expect(subject.cc).to eql(["a-cc-recipient@world.com"])
87
98
  expect(subject.subject).to eql("Hello World")
88
99
  end
89
100
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: webspicy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.20.11
4
+ version: 0.20.16
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bernard Lambeau
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-06-04 00:00:00.000000000 Z
11
+ date: 2021-06-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -212,6 +212,20 @@ dependencies:
212
212
  - - "~>"
213
213
  - !ruby/object:Gem::Version
214
214
  version: '1.0'
215
+ - !ruby/object:Gem::Dependency
216
+ name: mail
217
+ requirement: !ruby/object:Gem::Requirement
218
+ requirements:
219
+ - - "~>"
220
+ - !ruby/object:Gem::Version
221
+ version: '2.7'
222
+ type: :runtime
223
+ prerelease: false
224
+ version_requirements: !ruby/object:Gem::Requirement
225
+ requirements:
226
+ - - "~>"
227
+ - !ruby/object:Gem::Version
228
+ version: '2.7'
215
229
  description: Webspicy helps testing web services as software operation black boxes
216
230
  email: blambeau@gmail.com
217
231
  executables: