mofo 0.1.2 → 0.2
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/CHANGELOG +8 -0
- data/README +16 -6
- data/lib/microformat.rb +59 -20
- data/lib/microformat/array.rb +5 -0
- data/lib/microformat/simple.rb +16 -18
- data/lib/microformat/string.rb +1 -1
- data/lib/mofo.rb +1 -1
- data/lib/mofo/adr.rb +6 -0
- data/lib/mofo/geo.rb +3 -0
- data/lib/mofo/hcalendar.rb +5 -2
- data/lib/mofo/hcard.rb +7 -12
- data/lib/mofo/hentry.rb +1 -1
- data/lib/mofo/hresume.rb +17 -0
- data/lib/mofo/rel_bookmark.rb +6 -0
- data/lib/mofo/xfn.rb +66 -0
- data/lib/mofo/xoxo.rb +37 -39
- data/test/ext_test.rb +44 -0
- data/test/fixtures/event_addr.html +26 -0
- data/test/fixtures/hresume.html +409 -0
- data/test/fixtures/include_pattern_single_attribute.html +246 -0
- data/test/fixtures/upcoming_single.html +479 -0
- data/test/fixtures/xfn.html +200 -0
- data/test/format_test.rb +1 -1
- data/test/hatom_test.rb +5 -6
- data/test/hcalendar_test.rb +33 -0
- data/test/hcard_test.rb +132 -0
- data/test/hresume_test.rb +23 -0
- data/test/hreview_test.rb +36 -0
- data/test/include_pattern_test.rb +27 -0
- data/test/reltag_test.rb +40 -0
- data/test/test_helper.rb +9 -2
- data/test/xfn_test.rb +76 -0
- data/test/xoxo_test.rb +1 -1
- metadata +31 -4
@@ -0,0 +1,200 @@
|
|
1
|
+
<!DOCTYPE html PUBdtC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
2
|
+
<html xmlns="http://www.w3.org/1999/xhtml">
|
3
|
+
<head>
|
4
|
+
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
5
|
+
<title>XFN Test Data</title>
|
6
|
+
<style type="text/css">
|
7
|
+
body {
|
8
|
+
font-family: Helvetica, Arial, sans-serif;
|
9
|
+
color: #161616;
|
10
|
+
}
|
11
|
+
h1, h2, h3, h4 {
|
12
|
+
color: #333;
|
13
|
+
}
|
14
|
+
|
15
|
+
h1 {
|
16
|
+
font-weight: normal;
|
17
|
+
font-size: 240%;
|
18
|
+
}
|
19
|
+
|
20
|
+
dt {
|
21
|
+
font-weight: bold;
|
22
|
+
padding-left:20px;
|
23
|
+
}
|
24
|
+
|
25
|
+
.valid dt {
|
26
|
+
color: #45C445;
|
27
|
+
}
|
28
|
+
.invalid dt {
|
29
|
+
color: #D22828;
|
30
|
+
}
|
31
|
+
a { color: #666666; }
|
32
|
+
</style>
|
33
|
+
</head>
|
34
|
+
|
35
|
+
<body>
|
36
|
+
<h1>XFN Test Data</h1>
|
37
|
+
<h4>Steve Ivy, 02-05-2007</h4>
|
38
|
+
<p>This test data is based on the <a href="http://gmpg.org/xfn/11">XFN 1.1 profile</a>. Comments or suggestions on this data can be sent to <a href="mailto:steveivy@gmail.com">steveivy@gmail.com</a>.</p>
|
39
|
+
<h3>Valid Relationships - singletons</h3>
|
40
|
+
<p>These represent a single relationship on each link and are all valid.</p>
|
41
|
+
|
42
|
+
<dl class="valid">
|
43
|
+
<dt>Friendship - pick at most one</dt>
|
44
|
+
<dd><a href="#contact" rel="contact">friend - contact</a></dd>
|
45
|
+
<dd><a href="#acquaintance" rel="acquaintance">friend - acquaintance</a></dd>
|
46
|
+
<dd><a href="#friend" rel="friend">friend - friend</a></dd>
|
47
|
+
</dl>
|
48
|
+
|
49
|
+
<dl class="valid">
|
50
|
+
<dt>Physical</dt>
|
51
|
+
<dd><a href="#met" rel="met">physical - met</a></dd>
|
52
|
+
<dd><a href="#met" rel="met">physical - met (dupe)</a></dd>
|
53
|
+
</dl>
|
54
|
+
|
55
|
+
<dl class="valid">
|
56
|
+
<dt>Professional</dt>
|
57
|
+
<dd><a href="#co-worker" rel="co-worker">professional - co-worker</a></dd>
|
58
|
+
<dd><a href="#colleague" rel="colleague">professional - colleague</a></dd>
|
59
|
+
</dl>
|
60
|
+
|
61
|
+
<dl class="valid">
|
62
|
+
<dt>Geographical - pick at most one</dt>
|
63
|
+
<dd><a href="#co-resident" rel="co-resident">geographical - co-resident</a></dd>
|
64
|
+
<dd><a href="#neighbor" rel="neighbor">geographical - neighbor</a></dd>
|
65
|
+
</dl>
|
66
|
+
|
67
|
+
<dl class="valid">
|
68
|
+
<dt>Family - pick at most one</dt>
|
69
|
+
<dd><a href="#child" rel="child">family - child</a></dd>
|
70
|
+
<dd><a href="#parent" rel="parent">family - parent</a></dd>
|
71
|
+
<dd><a href="#sibling" rel="sibling">family - sibling</a></dd>
|
72
|
+
<dd><a href="#spouse" rel="spouse">family - spouse</a></dd>
|
73
|
+
<dd><a href="#kin" rel="kin">family - kin</a></dd>
|
74
|
+
</dl>
|
75
|
+
|
76
|
+
<dl class="valid">
|
77
|
+
<dt>Romantic</dt>
|
78
|
+
<dd><a href="#muse" rel="muse">romantic - muse</a></dt>
|
79
|
+
<dd><a href="#crush" rel="crush">romantic - crush</a></dd>
|
80
|
+
<dd><a href="#date" rel="colleague">romantic - date</a></dd>
|
81
|
+
<dd><a href="#sweetheart" rel="sweetheart">romantic - sweetheart</a></dd>
|
82
|
+
</dl>
|
83
|
+
|
84
|
+
<dl class="valid">
|
85
|
+
<dt>Identity</dt>
|
86
|
+
<dd><a href="#me" rel="me">me</a> (exclusive of all other values)</dd>
|
87
|
+
</dl>
|
88
|
+
|
89
|
+
<h3>Valid Relationships - compound</h3>
|
90
|
+
<p>These represent compound relationship on each link and should all be valid.</p>
|
91
|
+
|
92
|
+
<dl class="valid">
|
93
|
+
<dt>Friendship + Physical</dt>
|
94
|
+
<dd><a href="#contact" rel="contact met">contact + met</a></dd>
|
95
|
+
<dd><a href="#acquaintance" rel="acquaintance met">acquaintance + met</a></dd>
|
96
|
+
<dd><a href="#friend" rel="friend met">friend + met</a></dd>
|
97
|
+
</dl>
|
98
|
+
|
99
|
+
<dl class="valid">
|
100
|
+
<dt>Friendship + Professional</dt>
|
101
|
+
<dd><a href="#contact" rel="contact co-worker">contact + co-worker</a></dd>
|
102
|
+
<dd><a href="#acquaintance" rel="acquaintance co-worker">acquaintance + co-worker</a></dd>
|
103
|
+
<dd><a href="#friend" rel="friend co-worker">friend + co-worker</a></dd>
|
104
|
+
</dl>
|
105
|
+
|
106
|
+
<dl class="valid">
|
107
|
+
<dt>Friendship + Geographic</dt>
|
108
|
+
<dd><a href="#contact" rel="contact co-resident">contact + co-resident</a></dd>
|
109
|
+
<dd><a href="#acquaintance" rel="acquaintance co-resident">acquaintance + co-resident</a></dd>
|
110
|
+
<dd><a href="#friend" rel="friend co-resident">friend - co-resident</a></dd>
|
111
|
+
<dd><a href="#contact2" rel="contact co-resident">contact + neighbor</a></dd>
|
112
|
+
<dd><a href="#acquaintance2" rel="acquaintance neighbor">acquaintance + neighbor</a></dd>
|
113
|
+
<dd><a href="#friend2" rel="friend neighbor">friend - neighbor</a></dd>
|
114
|
+
</dl>
|
115
|
+
|
116
|
+
<dl class="valid">
|
117
|
+
<dt>Professional + Physical</dt>
|
118
|
+
<dd><a href="#co-worker" rel="co-worker met">co-worker + met</a></dd>
|
119
|
+
<dd><a href="#colleague" rel="colleague met">colleague + met</a></dd>
|
120
|
+
</dl>
|
121
|
+
|
122
|
+
<dl class="valid">
|
123
|
+
<dt>Professional + Romantic</dt>
|
124
|
+
<dd><a href="#co-worker" rel="co-worker muse">co-worker + muse</a></dd>
|
125
|
+
<dd><a href="#colleague" rel="colleague muse">colleague + muse</a></dd>
|
126
|
+
<dd><a href="#co-worker" rel="co-worker crush">co-worker + crush</a></dd>
|
127
|
+
<dd><a href="#colleague" rel="colleague crush">colleague + crush</a></dd>
|
128
|
+
<dd><a href="#co-worker" rel="co-worker date">co-worker + date</a></dd>
|
129
|
+
<dd><a href="#colleague" rel="colleague date">colleague + date</a></dd>
|
130
|
+
<dd><a href="#co-worker" rel="co-worker sweetheart">co-worker + sweetheart</a></dd>
|
131
|
+
<dd><a href="#colleague" rel="colleague sweetheart">colleague + sweetheart</a></dd>
|
132
|
+
</dl>
|
133
|
+
|
134
|
+
<dl class="valid">
|
135
|
+
<dt>Family + Professional</dt>
|
136
|
+
<dd><a href="#child" rel="child co-worker">child + co-worker</a></dd>
|
137
|
+
<dd><a href="#child" rel="child colleague">child + colleague</a></dd>
|
138
|
+
<dd><a href="#parent" rel="parent co-worker">parent + co-worker</a></dd>
|
139
|
+
<dd><a href="#parent" rel="parent colleague">parent + colleague</a></dd>
|
140
|
+
<dd><a href="#sibling" rel="sibling co-worker">sibling + co-worker</a></dd>
|
141
|
+
<dd><a href="#sibling" rel="sibling colleague">sibling + colleague</a></dd>
|
142
|
+
<dd><a href="#spouse" rel="spouse co-worker">spouse + co-worker</a></dd>
|
143
|
+
<dd><a href="#spouse" rel="spouse colleague">spouse + colleague</a></dd>
|
144
|
+
<dd><a href="#kin" rel="kin co-worker">kin + co-worker</a></dd>
|
145
|
+
<dd><a href="#kin" rel="kin colleague">kin + colleague</a></dd>
|
146
|
+
<dd><a href="#kin" rel="kin colleague">kin + colleague (purposeful dupe)</a></dd>
|
147
|
+
</dl>
|
148
|
+
|
149
|
+
<h3>Invalid relationships</h3>
|
150
|
+
<p>These relationships violate rules of exclusivity, mostly.</p>
|
151
|
+
|
152
|
+
<dl class="invalid">
|
153
|
+
<dt>Friendship - multiple values</dt>
|
154
|
+
<dd><a href="#contact" rel="contact acquaintance">contact + acquaintance</a></dd>
|
155
|
+
<dd><a href="#acquaintance" rel="acquaintance friend">acquaintance + friend</a></dd>
|
156
|
+
<dd><a href="#friend" rel="friend contact">friend + contact</a></dd>
|
157
|
+
</dl>
|
158
|
+
|
159
|
+
<dl class="invalid">
|
160
|
+
<dt>Geographical - multiple values</dt>
|
161
|
+
<dd><a href="#co-resident" rel="co-resident neighbor">co-resident + neighbor</a></dd>
|
162
|
+
</dl>
|
163
|
+
|
164
|
+
<dl class="invalid">
|
165
|
+
<dt>Family - multiple values</dt>
|
166
|
+
<dd><a href="#child" rel="child parent">child + parent</a></dd>
|
167
|
+
<dd><a href="#child" rel="child sibling">child + sibling</a></dd>
|
168
|
+
<dd><a href="#child" rel="child spouse">child + spouse</a></dd>
|
169
|
+
<dd><a href="#child" rel="child kin">child + kin</a></dd>
|
170
|
+
<dd><a href="#parent" rel="parent sibling">parent + sibling</a></dd>
|
171
|
+
<dd><a href="#parent" rel="parent spouse">parent + spouse</a></dd>
|
172
|
+
<dd><a href="#parent" rel="parent kin">parent + kin</a></dd>
|
173
|
+
<dd><a href="#sibling" rel="sibling spouse">sibling + spouse</a></dd>
|
174
|
+
<dd><a href="#sibling" rel="sibling kin">sibling + kin</a></dd>
|
175
|
+
<dd><a href="#spouse" rel="spouse kin">spouse + kin</a></dd>
|
176
|
+
</dl>
|
177
|
+
|
178
|
+
<dl class="invalid">
|
179
|
+
<dt>Identity - me + anything</dt>
|
180
|
+
<dd><a href="#contact" rel="me contact">me + contact</a></dd>
|
181
|
+
<dd><a href="#acquaintance" rel="me acquaintance">me + acquaintance</a></dd>
|
182
|
+
<dd><a href="#friend" rel="me friend">me + friend</a></dd>
|
183
|
+
<dd><a href="#met" rel="me met">me + met</a></dd>
|
184
|
+
<dd><a href="#co-worker" rel="me co-worker">me + co-worker</a></dd>
|
185
|
+
<dd><a href="#colleague" rel="me colleague">me + colleague</a></dd>
|
186
|
+
<dd><a href="#co-resident" rel="me co-resident">me + co-resident</a></dd>
|
187
|
+
<dd><a href="#neighbor" rel="me neighbor">me + neighbor</a></dd>
|
188
|
+
<dd><a href="#child" rel="me child">me + child</a></dd>
|
189
|
+
<dd><a href="#parent" rel="me parent">me + parent</a></dd>
|
190
|
+
<dd><a href="#sibling" rel="me sibling">me + sibling</a></dd>
|
191
|
+
<dd><a href="#spouse" rel="me spouse">me + spouse</a></dd>
|
192
|
+
<dd><a href="#kin" rel="me kin">me + kin</a></dd>
|
193
|
+
<dd><a href="#muse" rel="me muse">me + muse</a></dt>
|
194
|
+
<dd><a href="#crush" rel="me crush">me + crush</a></dd>
|
195
|
+
<dd><a href="#date" rel="me colleague">me + date</a></dd>
|
196
|
+
<dd><a href="#sweetheart" rel="me sweetheart">me + sweetheart</a></dd>
|
197
|
+
</dl>
|
198
|
+
|
199
|
+
</body>
|
200
|
+
</html>
|
data/test/format_test.rb
CHANGED
data/test/hatom_test.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require '
|
1
|
+
require File.dirname(__FILE__) + '/test_helper'
|
2
2
|
require 'mofo/hentry'
|
3
3
|
|
4
4
|
context "A parsed hEntry object" do
|
@@ -23,11 +23,10 @@ context "A parsed hEntry object" do
|
|
23
23
|
$hentry.published.should.be.an.instance_of Time
|
24
24
|
end
|
25
25
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
# end
|
26
|
+
xspecify "should have an inferred updated attribute which references the published date object" do
|
27
|
+
$hentry.updated.should.be.an.instance_of Time
|
28
|
+
$hentry.updated.should.be $hentry.published
|
29
|
+
end
|
31
30
|
|
32
31
|
specify "should have a bookmark (permalink)" do
|
33
32
|
$hentry.bookmark.should.equal "/post/13"
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper'
|
2
|
+
require 'mofo/hcalendar'
|
3
|
+
|
4
|
+
context "A parsed hCalendar object with an embedded hCard" do
|
5
|
+
setup do
|
6
|
+
$hcalendar_hcard ||= HCalendar.find(:first => fixture(:upcoming_single))
|
7
|
+
end
|
8
|
+
|
9
|
+
specify "should have an HCard for its location" do
|
10
|
+
$hcalendar_hcard.location.should.be.an.instance_of HCard
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
context "A parsed hCalendar object with embedded adr" do
|
15
|
+
setup do
|
16
|
+
$hcalendar_addr ||= HCalendar.find(:first => fixture(:event_addr))
|
17
|
+
end
|
18
|
+
|
19
|
+
specify "should have an Adr for its location" do
|
20
|
+
$hcalendar_addr.location.should.be.an.instance_of Adr
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
context "A parsed hCalendar object with string location" do
|
25
|
+
setup do
|
26
|
+
$hcalendar_string ||= HCalendar.find(:first => fixture(:upcoming))
|
27
|
+
end
|
28
|
+
|
29
|
+
specify "should have a string for its location" do
|
30
|
+
$hcalendar_string.location.should.be.an.instance_of String
|
31
|
+
$hcalendar_string.location.should.not.be.empty
|
32
|
+
end
|
33
|
+
end
|
data/test/hcard_test.rb
ADDED
@@ -0,0 +1,132 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper'
|
2
|
+
require 'mofo/hcard'
|
3
|
+
require 'mofo/hreview'
|
4
|
+
|
5
|
+
context "A simple hcard definition" do
|
6
|
+
specify "should parse a page with an hcard" do
|
7
|
+
proc { HCard.find(fixture(:fauxtank)) }.should.not.raise MicroformatNotFound
|
8
|
+
end
|
9
|
+
|
10
|
+
specify "should raise an error if no hcard is found in strict mode" do
|
11
|
+
proc { HCard.find(fixture(:fake), :strict => true) }.should.raise MicroformatNotFound
|
12
|
+
end
|
13
|
+
|
14
|
+
specify "should return an empty array if no hcard is found" do
|
15
|
+
HCard.find(fixture(:fake)).should.equal []
|
16
|
+
end
|
17
|
+
|
18
|
+
specify "should return nil if no hcard is found with :first" do
|
19
|
+
HCard.find(:first => fixture(:fake)).should.equal nil
|
20
|
+
end
|
21
|
+
|
22
|
+
specify "should return nil if no hcard is found with :all" do
|
23
|
+
HCard.find(:all => fixture(:fake)).should.equal []
|
24
|
+
end
|
25
|
+
|
26
|
+
specify "should accept a :text option" do
|
27
|
+
HCard.find(:text => open(fixture(:fauxtank)).read).should.not.equal []
|
28
|
+
HCard.find(:text => open(fixture(:fauxtank)).read).should.not.equal nil
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
context "The parsed fauxtank hCard object" do
|
33
|
+
setup do
|
34
|
+
$fauxtank ||= HCard.find(:first => fixture(:fauxtank))
|
35
|
+
end
|
36
|
+
|
37
|
+
specify "should be an instance of HCard" do
|
38
|
+
$fauxtank.should.be.an.instance_of HCard
|
39
|
+
end
|
40
|
+
|
41
|
+
specify "should have `fauxtank' as the nickname" do
|
42
|
+
$fauxtank.nickname.should.equal "fauxtank"
|
43
|
+
end
|
44
|
+
|
45
|
+
specify "should have two email addresses" do
|
46
|
+
$fauxtank.email.size.should.equal 2
|
47
|
+
$fauxtank.email.first.should.equal "fauxtank [at] gmail.com"
|
48
|
+
$fauxtank.email.last.should.equal "chris [at] fauxtank.com"
|
49
|
+
end
|
50
|
+
|
51
|
+
specify "should have `Chris' as the given name" do
|
52
|
+
$fauxtank.n.given_name.should.equal "Chris"
|
53
|
+
end
|
54
|
+
|
55
|
+
specify "should have `Murphy' as the family name" do
|
56
|
+
$fauxtank.n.family_name.should.equal "Murphy"
|
57
|
+
end
|
58
|
+
|
59
|
+
specify "should have `Chicago' as the locality" do
|
60
|
+
$fauxtank.adr.locality.should.equal "Chicago"
|
61
|
+
end
|
62
|
+
|
63
|
+
specify "should have `United States' as the country-name" do
|
64
|
+
$fauxtank.adr.country_name.should.equal "United States"
|
65
|
+
end
|
66
|
+
|
67
|
+
specify "should have fauxtank's profile pic as the logo" do
|
68
|
+
$fauxtank.logo.should.equal "http://static.flickr.com/25/buddyicons/89622800@N00.jpg?1128967902"
|
69
|
+
end
|
70
|
+
|
71
|
+
specify "should know what properties it found" do
|
72
|
+
$fauxtank.properties.sort.should.equal ["fn", "note", "n", "email", "logo", "adr", "nickname", "title", "url"].sort
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
context "The parsed Bob hCard object" do
|
77
|
+
setup do
|
78
|
+
$bob ||= HCard.find(:first => fixture(:bob))
|
79
|
+
end
|
80
|
+
|
81
|
+
specify "should have three valid emails with type information" do
|
82
|
+
$bob.email.value.size.should.equal 3
|
83
|
+
$bob.email.type.first.should.equal 'home'
|
84
|
+
$bob.email.value.first.should.equal 'bob@gmail.com'
|
85
|
+
$bob.email.type[1].should.equal 'work'
|
86
|
+
$bob.email.value[1].should.equal 'robert@yahoo.com'
|
87
|
+
$bob.email.type.last.should.equal 'home'
|
88
|
+
$bob.email.value.last.should.equal 'bobby@gmail.com'
|
89
|
+
end
|
90
|
+
|
91
|
+
specify "should have two valid telephone numbers with type information" do
|
92
|
+
$bob.tel.type.size.should.equal 2
|
93
|
+
$bob.tel.type.first.should.equal 'home'
|
94
|
+
$bob.tel.value.first.should.equal '707-555-9990'
|
95
|
+
$bob.tel.type.last.should.equal 'cell'
|
96
|
+
$bob.tel.value.last.should.equal '707-555-4756'
|
97
|
+
end
|
98
|
+
|
99
|
+
specify "should have a given, additional, and family name" do
|
100
|
+
$bob.n.given_name.should.equal 'Robert'
|
101
|
+
$bob.n.additional_name.should.equal 'Albert'
|
102
|
+
$bob.n.family_name.should.equal 'Smith'
|
103
|
+
end
|
104
|
+
|
105
|
+
specify "should have a valid url" do
|
106
|
+
$bob.url.should.equal "http://nubhub.com/bob"
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
context "The parsed simple hCard object" do
|
111
|
+
setup do
|
112
|
+
$simple ||= HCard.find(:first => fixture(:simple))
|
113
|
+
end
|
114
|
+
|
115
|
+
specify "should have an org string" do
|
116
|
+
$simple.org.should.be.an.instance_of String
|
117
|
+
$simple.org.should.equal "Err the Blog"
|
118
|
+
end
|
119
|
+
|
120
|
+
specify "should have an email string" do
|
121
|
+
$simple.email.should.be.an.instance_of String
|
122
|
+
$simple.email.should.equal "chris[at]ozmm[dot]org"
|
123
|
+
end
|
124
|
+
|
125
|
+
specify "should have a valid name" do
|
126
|
+
$simple.fn.should.equal "Chris Wanstrath"
|
127
|
+
end
|
128
|
+
|
129
|
+
specify "should have a valid url" do
|
130
|
+
$simple.url.should.equal "http://ozmm.org/"
|
131
|
+
end
|
132
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper'
|
2
|
+
require 'mofo/hresume'
|
3
|
+
|
4
|
+
context "A parsed hResume object" do
|
5
|
+
setup do
|
6
|
+
$hresume ||= HResume.find(:first => fixture(:hresume))
|
7
|
+
end
|
8
|
+
|
9
|
+
fields = {
|
10
|
+
:contact => HCard,
|
11
|
+
:education => HCalendar,
|
12
|
+
:experience => Array,
|
13
|
+
:summary => String,
|
14
|
+
:skills => String
|
15
|
+
}
|
16
|
+
|
17
|
+
fields.each do |field, klass|
|
18
|
+
specify "should have an #{klass} for #{field}" do
|
19
|
+
$hresume.send(field).should.not.be.nil
|
20
|
+
$hresume.send(field).should.be.an.instance_of klass
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper'
|
2
|
+
require 'mofo/hreview'
|
3
|
+
|
4
|
+
context "The parsed Firesteed hReview object" do
|
5
|
+
setup do
|
6
|
+
$firesteed ||= HReview.find(:first => fixture(:corkd))
|
7
|
+
end
|
8
|
+
|
9
|
+
specify "should have a valid, coerced dtreviewed field" do
|
10
|
+
$firesteed.dtreviewed.should.be.an.instance_of Time
|
11
|
+
end
|
12
|
+
|
13
|
+
specify "should have a rating of 5" do
|
14
|
+
$firesteed.rating.should.equal 5
|
15
|
+
end
|
16
|
+
|
17
|
+
specify "should have a description" do
|
18
|
+
$firesteed.description.should.equal %[This is probably my favorite every day (well, not every day) wine. It's light, subtly sweet, ripe fruit, slightly spicy oak. It's a bit "slippery", if that makes sense (in a very good way). Highly drinkable.]
|
19
|
+
end
|
20
|
+
|
21
|
+
specify "should have an HCard as the reviewer" do
|
22
|
+
$firesteed.reviewer.fn.should.equal "simplebits"
|
23
|
+
$firesteed.reviewer.photo.should.equal "/img/icon-user-64.gif"
|
24
|
+
$firesteed.reviewer.url.should.equal "/people/simplebits"
|
25
|
+
end
|
26
|
+
|
27
|
+
specify "should have a valid item" do
|
28
|
+
$firesteed.item.fn.should.equal "Firesteed 2003 Pinot Noir"
|
29
|
+
end
|
30
|
+
|
31
|
+
specify "should have 7 tags" do
|
32
|
+
$firesteed.tags.size.should.equal 7
|
33
|
+
$firesteed.tags.first.should.equal "berry"
|
34
|
+
$firesteed.tags.last.should.equal "sweet"
|
35
|
+
end
|
36
|
+
end
|