Skip to content

Commit 3c7923b

Browse files
committed
Update tests to reflect added fields
1 parent ae8e389 commit 3c7923b

File tree

2 files changed

+79
-59
lines changed

2 files changed

+79
-59
lines changed

spec/services/xml_generator/all_providers_spec.rb

Lines changed: 42 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -19,36 +19,47 @@
1919
end
2020

2121
it "generates the xml" do
22-
expect(subject.perform).to eq(
23-
<<~TEXT
24-
<?xml version="1.0"?>
25-
<cmes>
26-
<content_provider name="#{provider1.name}">
27-
<topic_year year="#{topic1.published_at.year}">
28-
<topic_month month="#{topic1.published_at.strftime("%m_%B")}">
29-
<title name="#{topic1.title}">
30-
<topic_id>#{topic1.id}</topic_id>
31-
<topic_files files="Files"/>
32-
<topic_tags>#{topic1.current_tags_list.join(", ")}</topic_tags>
33-
</title>
34-
</topic_month>
35-
</topic_year>
36-
</content_provider>
37-
<content_provider name="#{provider2.name}">
38-
<topic_year year="#{topic2.published_at.year}">
39-
<topic_month month="#{topic2.published_at.strftime("%m_%B")}">
40-
<title name="#{topic2.title}">
41-
<topic_id>#{topic2.id}</topic_id>
42-
<topic_files files="Files">
43-
<file_name_1 file_size="494323">test_image.png</file_name_1>
44-
</topic_files>
45-
<topic_tags>#{topic2.current_tags_list.join(", ")}</topic_tags>
46-
</title>
47-
</topic_month>
48-
</topic_year>
49-
</content_provider>
50-
</cmes>
51-
TEXT
52-
)
22+
xml = subject.perform
23+
doc = Nokogiri::XML(xml)
24+
25+
[provider1, provider2].each do |prov|
26+
pnode = doc.at_xpath("//cmes/content_provider[@name='#{prov.name}']")
27+
expect(pnode).to be_present
28+
end
29+
30+
[[provider1, topic1], [provider2, topic2]].each do |prov, topic|
31+
pnode = doc.at_xpath("//cmes/content_provider[@name='#{prov.name}']")
32+
year = topic.published_at.year
33+
ynode = pnode.at_xpath("./topic_year[@year='#{year}']")
34+
expect(ynode).to be_present
35+
36+
month_label = topic.published_at.strftime('%m_%B')
37+
mnode = ynode.at_xpath("./topic_month[@month='#{month_label}']")
38+
expect(mnode).to be_present
39+
40+
tnode = mnode.at_xpath("./title[@name='#{topic.title}']")
41+
expect(tnode).to be_present
42+
43+
expect(tnode.at_xpath('./topic_id').text).to eq(topic.id.to_s)
44+
expect(tnode.at_xpath('./counter').text).to eq('0')
45+
expect(tnode.at_xpath('./topic_volume').text).to eq(topic.published_at.year.to_s)
46+
expect(tnode.at_xpath('./topic_issue').text).to eq(topic.published_at.month.to_s)
47+
48+
files = tnode.at_xpath("./topic_files[@files='Files']")
49+
expect(files).to be_present
50+
if topic.documents.attached? && topic.documents.reject { |d| d.content_type == 'video/mp4' }.any?
51+
first_file = files.element_children.first
52+
expect(first_file).to be_present
53+
expect(first_file.text).to be_present
54+
expect(first_file['file_size']).to be_present
55+
else
56+
expect(files.element_children).to be_empty
57+
end
58+
59+
author1 = tnode.at_xpath('./topic_author/topic_author_1')
60+
expect(author1.text).to eq(' ')
61+
62+
expect(tnode.at_xpath('./topic_tags').text).to eq(topic.current_tags_list.join(', '))
63+
end
5364
end
5465
end

spec/services/xml_generator/single_provider_spec.rb

Lines changed: 37 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,12 @@
66
let(:provider) { create(:provider) }
77

88
it "generates the xml" do
9-
expect(subject.perform).to eq(
10-
<<~TEXT
11-
<?xml version="1.0"?>
12-
<cmes>
13-
<content_provider name="#{provider.name}"/>
14-
</cmes>
15-
TEXT
16-
)
9+
xml = subject.perform
10+
doc = Nokogiri::XML(xml)
11+
provider_nodes = doc.xpath("//cmes/content_provider[@name='#{provider.name}']")
12+
expect(provider_nodes.size).to eq(1)
13+
# No topics → self-closing provider node (no children)
14+
expect(provider_nodes.first.element_children).to be_empty
1715
end
1816

1917
context "with topics" do
@@ -35,26 +33,37 @@
3533
end
3634

3735
it "generates the xml" do
38-
expect(subject.perform).to eq(
39-
<<~TEXT
40-
<?xml version="1.0"?>
41-
<cmes>
42-
<content_provider name="#{provider.name}">
43-
<topic_year year="#{topic.published_at.year}">
44-
<topic_month month="#{topic.published_at.strftime("%m_%B")}">
45-
<title name="#{topic.title}">
46-
<topic_id>#{topic.id}</topic_id>
47-
<topic_files files="Files">
48-
<file_name_1 file_size="494323">test_image.png</file_name_1>
49-
</topic_files>
50-
<topic_tags>#{topic.current_tags_list.join(", ")}</topic_tags>
51-
</title>
52-
</topic_month>
53-
</topic_year>
54-
</content_provider>
55-
</cmes>
56-
TEXT
57-
)
36+
xml = subject.perform
37+
doc = Nokogiri::XML(xml)
38+
39+
provider_node = doc.at_xpath("//cmes/content_provider[@name='#{provider.name}']")
40+
expect(provider_node).to be_present
41+
42+
year_node = provider_node.at_xpath("./topic_year[@year='#{topic.published_at.year}']")
43+
expect(year_node).to be_present
44+
45+
month_label = topic.published_at.strftime("%m_%B")
46+
month_node = year_node.at_xpath("./topic_month[@month='#{month_label}']")
47+
expect(month_node).to be_present
48+
49+
title_node = month_node.at_xpath("./title[@name='#{topic.title}']")
50+
expect(title_node).to be_present
51+
52+
expect(title_node.at_xpath('./topic_id').text).to eq(topic.id.to_s)
53+
expect(title_node.at_xpath('./counter').text).to eq('0')
54+
expect(title_node.at_xpath('./topic_volume').text).to eq(topic.published_at.year.to_s)
55+
expect(title_node.at_xpath('./topic_issue').text).to eq(topic.published_at.month.to_s)
56+
57+
files_node = title_node.at_xpath("./topic_files[@files='Files']")
58+
expect(files_node).to be_present
59+
file1 = files_node.at_xpath('./file_name_1')
60+
expect(file1.text).to eq('test_image.png')
61+
expect(file1['file_size']).to be_present
62+
63+
author_node = title_node.at_xpath('./topic_author/topic_author_1')
64+
expect(author_node.text).to eq(' ')
65+
66+
expect(title_node.at_xpath('./topic_tags').text).to eq(topic.current_tags_list.join(', '))
5867
end
5968
end
6069
end

0 commit comments

Comments
 (0)