patentscope 0.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.
- data/.gitignore +26 -0
- data/.rspec +1 -0
- data/.ruby-version +1 -0
- data/Gemfile +4 -0
- data/License.txt +22 -0
- data/README.md +257 -0
- data/Rakefile +27 -0
- data/lib/patentscope.rb +52 -0
- data/lib/patentscope/client.rb +32 -0
- data/lib/patentscope/configuration.rb +42 -0
- data/lib/patentscope/pct_doc_number.rb +45 -0
- data/lib/patentscope/version.rb +5 -0
- data/lib/patentscope/webservice.rb +74 -0
- data/lib/patentscope/webservice_soap_builder.rb +43 -0
- data/patentscope.gemspec +27 -0
- data/spec/client_spec.rb +75 -0
- data/spec/configuration_spec.rb +138 -0
- data/spec/patentscope_spec.rb +91 -0
- data/spec/pct_app_number_spec.rb +256 -0
- data/spec/pct_pub_number_spec.rb +220 -0
- data/spec/spec_helper.rb +29 -0
- data/spec/webservice_soap_builder_spec.rb +318 -0
- data/spec/webservice_spec.rb +97 -0
- data/spec/wipo_test_suite_doc_id_examples.yaml +298 -0
- data/spec/wipo_test_suite_ia_number_examples.yaml +40 -0
- data/spec/wipo_test_suite_spec.rb +44 -0
- metadata +185 -0
@@ -0,0 +1,45 @@
|
|
1
|
+
module Patentscope
|
2
|
+
|
3
|
+
class PctAppNumber < String
|
4
|
+
|
5
|
+
def initialize(number = "")
|
6
|
+
raise NoNumberError,
|
7
|
+
"Patent application number was not entered" if number.nil?
|
8
|
+
super(number.strip)
|
9
|
+
end
|
10
|
+
|
11
|
+
def valid?
|
12
|
+
self.match(/\A(([Pp][Cc][Tt]\/?)?[a-zA-Z]{2}\d{4}\/?\d{6})\Z/)
|
13
|
+
end
|
14
|
+
|
15
|
+
def validate
|
16
|
+
raise WrongNumberFormatError,
|
17
|
+
"PCT application number is not in correct format (PCT/CCYYYY/NNNNNN)" unless valid?
|
18
|
+
end
|
19
|
+
|
20
|
+
def to_ia_number
|
21
|
+
self.upcase!
|
22
|
+
self.gsub!('/', '')
|
23
|
+
self.gsub!('PCT', '')
|
24
|
+
self
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
class PctPubNumber < String
|
29
|
+
|
30
|
+
def initialize(number = "")
|
31
|
+
raise NoNumberError,
|
32
|
+
"Patent publication number was not entered" if number.nil?
|
33
|
+
super(number.strip)
|
34
|
+
end
|
35
|
+
|
36
|
+
def valid?
|
37
|
+
self.match(/\A(([Ww][Oo]\/?)?\s?\d{4}\/?\s?\d{6})\Z/)
|
38
|
+
end
|
39
|
+
|
40
|
+
def validate
|
41
|
+
raise WrongNumberFormatError,
|
42
|
+
"PCT publication number is not in correct format (WO/YYYY/NNNNNN)" unless valid?
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
module Patentscope
|
2
|
+
|
3
|
+
class Webservice
|
4
|
+
|
5
|
+
PATENTSCOPE_WEBSERVICE_LOCATION = "http://www.wipo.int/patentscope-webservice/servicesPatentScope"
|
6
|
+
|
7
|
+
def wsdl
|
8
|
+
send_wsdl_request
|
9
|
+
end
|
10
|
+
|
11
|
+
def get_available_documents(args = {})
|
12
|
+
ia_number = PctAppNumber.new(args[:ia_number]).to_ia_number
|
13
|
+
perform_operation(:getAvailableDocuments, { iaNumber: ia_number })
|
14
|
+
end
|
15
|
+
|
16
|
+
def get_document_content(args = {})
|
17
|
+
doc_id = args[:doc_id]
|
18
|
+
perform_operation(:getDocumentContent, { docId: doc_id })
|
19
|
+
end
|
20
|
+
|
21
|
+
def get_document_ocr_content(args = {})
|
22
|
+
doc_id = args[:doc_id]
|
23
|
+
perform_operation(:getDocumentOcrContent, { docId: doc_id })
|
24
|
+
end
|
25
|
+
|
26
|
+
def get_iasr(args = {})
|
27
|
+
ia_number = PctAppNumber.new(args[:ia_number]).to_ia_number
|
28
|
+
perform_operation(:getIASR, { iaNumber: ia_number })
|
29
|
+
end
|
30
|
+
|
31
|
+
def get_document_table_of_contents(args = {})
|
32
|
+
doc_id = args[:doc_id]
|
33
|
+
perform_operation(:getDocumentTableOfContents, { docId: doc_id })
|
34
|
+
end
|
35
|
+
|
36
|
+
def get_document_content_page(args = {})
|
37
|
+
doc_id = args[:doc_id]
|
38
|
+
page_id = args[:page_id]
|
39
|
+
perform_operation(:getDocumentContentPage, { docId: doc_id, pageId: page_id })
|
40
|
+
end
|
41
|
+
|
42
|
+
private
|
43
|
+
|
44
|
+
def perform_operation(operation, options_hash)
|
45
|
+
soap_envelope = soapbuilder.build_envelope(operation, options_hash)
|
46
|
+
response = send_soap_request(soap_envelope)
|
47
|
+
if response.include?('This request requires HTTP authentication')
|
48
|
+
raise WrongCredentialsError
|
49
|
+
elsif response.include?('Business error during the execution of service')
|
50
|
+
raise BusinessError
|
51
|
+
else
|
52
|
+
soapbuilder.strip_envelope(response, operation)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def send_soap_request(soap_envelope_xml)
|
57
|
+
client.post_url(PATENTSCOPE_WEBSERVICE_LOCATION, "text/xml", soap_envelope_xml)
|
58
|
+
end
|
59
|
+
|
60
|
+
def send_wsdl_request
|
61
|
+
client.get_url(PATENTSCOPE_WEBSERVICE_LOCATION + '?wsdl')
|
62
|
+
end
|
63
|
+
|
64
|
+
def client
|
65
|
+
raise NoCredentialsError unless Patentscope.configured?
|
66
|
+
Client.new(username: Patentscope.configuration.username,
|
67
|
+
password: Patentscope.configuration.password)
|
68
|
+
end
|
69
|
+
|
70
|
+
def soapbuilder
|
71
|
+
WebserviceSoapBuilder.new
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module Patentscope
|
2
|
+
|
3
|
+
class WebserviceSoapBuilder
|
4
|
+
|
5
|
+
def build_envelope(operation, options_hash)
|
6
|
+
builder = Nokogiri::XML::Builder.new do |xml|
|
7
|
+
xml.Envelope do
|
8
|
+
ns = xml.doc.root.add_namespace_definition('S', 'http://schemas.xmlsoap.org/soap/envelope/')
|
9
|
+
xml.doc.root.namespace = ns
|
10
|
+
xml.Body do
|
11
|
+
xml.send(operation, :'xmlns' => 'http://www.wipo.org/wsdl/ps') do
|
12
|
+
options_hash.each do |key, value|
|
13
|
+
xml.send(key, value)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end.to_xml
|
19
|
+
end
|
20
|
+
|
21
|
+
def strip_envelope(response, operation)
|
22
|
+
case operation
|
23
|
+
when :getAvailableDocuments
|
24
|
+
result_tag = 'doc'
|
25
|
+
when :getDocumentContent
|
26
|
+
result_tag = 'documentContent'
|
27
|
+
when :getDocumentOcrContent
|
28
|
+
result_tag = 'documentContent'
|
29
|
+
when :getIASR
|
30
|
+
result_tag = 'wo-international-application-status'
|
31
|
+
when :getDocumentTableOfContents
|
32
|
+
result_tag = 'content'
|
33
|
+
when :getDocumentContentPage
|
34
|
+
result_tag = 'pageContent'
|
35
|
+
end
|
36
|
+
doc = Nokogiri::XML(response)
|
37
|
+
stripped_response = doc.xpath("//iasr:#{result_tag}", 'iasr' => "http://www.wipo.org/wsdl/ps").to_xml
|
38
|
+
# this seems to be the only way to add back the XML declaration to the XML!
|
39
|
+
stripped_response_with_declaration = Nokogiri::XML(stripped_response).to_s
|
40
|
+
stripped_response_with_declaration
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
data/patentscope.gemspec
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'patentscope/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |gem|
|
7
|
+
gem.name = "patentscope"
|
8
|
+
gem.version = Patentscope::VERSION
|
9
|
+
gem.authors = ["Chong-Yee Khoo"]
|
10
|
+
gem.email = ["mail@cykhoo.com"]
|
11
|
+
gem.description = %q{Ruby interface to the Patentscope Webservice provided by the World Intellectual Property Organisation. Requires a subscription to the Patentscope Web Service}
|
12
|
+
gem.summary = %q{Ruby interface with WIPO Patentscope Webservice}
|
13
|
+
gem.homepage = "http://www.cantab-ip.com"
|
14
|
+
|
15
|
+
gem.files = `git ls-files`.split($/)
|
16
|
+
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
17
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
18
|
+
gem.require_paths = ["lib"]
|
19
|
+
|
20
|
+
gem.add_development_dependency 'rake'
|
21
|
+
gem.add_development_dependency 'rspec', '~> 3.0.0.beta1'
|
22
|
+
gem.add_development_dependency 'vcr'
|
23
|
+
gem.add_development_dependency 'webmock'
|
24
|
+
|
25
|
+
gem.add_runtime_dependency 'nokogiri'
|
26
|
+
gem.add_runtime_dependency 'unicode_titlecase'
|
27
|
+
end
|
data/spec/client_spec.rb
ADDED
@@ -0,0 +1,75 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module Patentscope
|
4
|
+
|
5
|
+
describe Client, :core, :vcr do
|
6
|
+
|
7
|
+
before { Patentscope.configure_from_env}
|
8
|
+
|
9
|
+
let(:client) { Client.new(username: Patentscope.configuration.username, password: Patentscope.configuration.password) }
|
10
|
+
|
11
|
+
it "exists" do
|
12
|
+
expect(client).to_not be_nil
|
13
|
+
end
|
14
|
+
|
15
|
+
describe "methods" do
|
16
|
+
|
17
|
+
it "has its own attribute reader methods" do
|
18
|
+
expect(client).to respond_to(:username)
|
19
|
+
expect(client).to respond_to(:password)
|
20
|
+
end
|
21
|
+
|
22
|
+
it "has other methods" do
|
23
|
+
expect(client).to respond_to(:get_url)
|
24
|
+
expect(client).to respond_to(:post_url)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
describe "attribute reader methods" do
|
29
|
+
|
30
|
+
describe "username method" do
|
31
|
+
it "returns the right username" do
|
32
|
+
expect(client.username).to eq(Patentscope.configuration.username)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
describe "password method" do
|
37
|
+
it "returns the right password" do
|
38
|
+
expect(client.password).to eq(Patentscope.configuration.password)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
describe "attribute writer methods" do
|
44
|
+
|
45
|
+
it "is not possible to set username" do
|
46
|
+
expect { client.username = 'foo' }.to raise_error()
|
47
|
+
end
|
48
|
+
|
49
|
+
it "is not possible to set password" do
|
50
|
+
expect { client.password = 'foo' }.to raise_error()
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
describe "get_url method" do
|
55
|
+
it "fetches the Cantab website by GET" do
|
56
|
+
site = client.get_url('http://www.cantab-ip.com')
|
57
|
+
expect(site).to include('<html')
|
58
|
+
end
|
59
|
+
|
60
|
+
it "fetches the Patentscope WSDL by GET" do
|
61
|
+
site = client.get_url('http://www.wipo.int/patentscope-webservice/servicesPatentScope?wsdl')
|
62
|
+
expect(site).to include('<?xml')
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
describe "post_url method" do
|
67
|
+
it "fetches a URL by POST" do
|
68
|
+
Patentscope.configure_from_env
|
69
|
+
soap_envelope_xml = '<?xml version="1.0"?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><S:Body><getIASR xmlns="http://www.wipo.org/wsdl/ps"><iaNumber>SG2009000062</iaNumber></getIASR></S:Body></S:Envelope>'
|
70
|
+
site = client.post_url('http://www.wipo.int/patentscope-webservice/servicesPatentScope', 'text/xml', soap_envelope_xml)
|
71
|
+
expect(site).to include('<?xml')
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
@@ -0,0 +1,138 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module Patentscope
|
4
|
+
|
5
|
+
describe Patentscope do
|
6
|
+
|
7
|
+
it 'has a configure class method' do
|
8
|
+
expect(Patentscope).to respond_to(:configure)
|
9
|
+
end
|
10
|
+
|
11
|
+
it 'has a configure_from_env class method' do
|
12
|
+
expect(Patentscope).to respond_to(:configure_from_env)
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'has a configured? class method' do
|
16
|
+
expect(Patentscope).to respond_to(:configured?)
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'has a reset_configuration class method' do
|
20
|
+
expect(Patentscope).to respond_to(:reset_configuration)
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'has a configuration class method' do
|
24
|
+
expect(Patentscope).to respond_to(:configuration)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
describe 'Patentscope::Configuration class' do
|
29
|
+
|
30
|
+
it 'has a username instance method' do
|
31
|
+
expect(Patentscope::Configuration.new).to respond_to(:username)
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'has a password instance method' do
|
35
|
+
expect(Patentscope::Configuration.new).to respond_to(:password)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
describe 'Patentscope before configuration' do
|
40
|
+
|
41
|
+
before { Patentscope.reset_configuration }
|
42
|
+
|
43
|
+
it 'configuration object is nil if configure not called' do
|
44
|
+
expect(Patentscope.configuration).to be_nil
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'is not configured' do
|
48
|
+
expect(Patentscope.configured?).to be_falsey
|
49
|
+
end
|
50
|
+
|
51
|
+
it 'raises an error during client operations' do
|
52
|
+
expect do
|
53
|
+
Webservice.new.get_iasr(ia_number: 'SG2009000062')
|
54
|
+
end.to raise_error(Patentscope::NoCredentialsError)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
describe 'Patentscope with configuration but no specific credentials given' do
|
59
|
+
|
60
|
+
before { Patentscope.reset_configuration }
|
61
|
+
|
62
|
+
it 'username defaults to null string if not explicitly set in the configure block' do
|
63
|
+
Patentscope.configure
|
64
|
+
expect(Patentscope.configuration.username).to eq('')
|
65
|
+
end
|
66
|
+
|
67
|
+
it 'password defaults to null string if not explicitly set in the configure block' do
|
68
|
+
Patentscope.configure
|
69
|
+
expect(Patentscope.configuration.password).to eq('')
|
70
|
+
end
|
71
|
+
|
72
|
+
it 'raises an error during client operations' do
|
73
|
+
expect do
|
74
|
+
Webservice.new.get_iasr(ia_number: 'SG2009000062')
|
75
|
+
end.to raise_error(Patentscope::NoCredentialsError)
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
describe 'Patentscope with configuration using configuration block' do
|
80
|
+
|
81
|
+
before do
|
82
|
+
Patentscope.configure do |config|
|
83
|
+
config.username = 'joe_bloggs'
|
84
|
+
config.password = 'b10ggsy'
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
after(:each) do
|
89
|
+
Patentscope.reset_configuration
|
90
|
+
end
|
91
|
+
|
92
|
+
it 'configures the username and password in a block in the configure method' do
|
93
|
+
expect(Patentscope.configuration.username).to eq('joe_bloggs')
|
94
|
+
expect(Patentscope.configuration.password).to eq('b10ggsy')
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
describe "Patentscope with configuration loading from environment variables" do
|
99
|
+
|
100
|
+
after(:each) do
|
101
|
+
Patentscope.reset_configuration
|
102
|
+
end
|
103
|
+
|
104
|
+
describe 'where a configuration has already been set' do
|
105
|
+
before do
|
106
|
+
Patentscope.configure do |config|
|
107
|
+
config.username = 'joe_bloggs'
|
108
|
+
config.password = 'b10ggsy'
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
it 'loading operation fails' do
|
113
|
+
expect(Patentscope.configure_from_env).to be false
|
114
|
+
end
|
115
|
+
|
116
|
+
it 'does not overwrite existing configuration' do
|
117
|
+
expect(Patentscope.configuration.username).to eq('joe_bloggs')
|
118
|
+
expect(Patentscope.configuration.password).to eq('b10ggsy')
|
119
|
+
|
120
|
+
expect(Patentscope.configuration.username).to_not eq(ENV['PATENTSCOPE_WEBSERVICE_USERNAME'])
|
121
|
+
expect(Patentscope.configuration.password).to_not eq(ENV['PATENTSCOPE_WEBSERVICE_PASSWORD'])
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
describe 'where there is no existing configuration' do
|
126
|
+
|
127
|
+
it 'loading operation succeeds' do
|
128
|
+
expect(Patentscope.configure_from_env).to be true
|
129
|
+
end
|
130
|
+
|
131
|
+
it 'assigns the configuration from environment variables' do
|
132
|
+
Patentscope.configure_from_env
|
133
|
+
expect(Patentscope.configuration.username).to eq(ENV['PATENTSCOPE_WEBSERVICE_USERNAME'])
|
134
|
+
expect(Patentscope.configuration.password).to eq(ENV['PATENTSCOPE_WEBSERVICE_PASSWORD'])
|
135
|
+
end
|
136
|
+
end
|
137
|
+
end
|
138
|
+
end
|
@@ -0,0 +1,91 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module Patentscope
|
4
|
+
|
5
|
+
describe Patentscope, :core, :vcr do
|
6
|
+
|
7
|
+
before { Patentscope.configure_from_env }
|
8
|
+
|
9
|
+
let(:patentscope) { Patentscope }
|
10
|
+
|
11
|
+
it "exists" do
|
12
|
+
expect(patentscope).to_not be_nil
|
13
|
+
end
|
14
|
+
|
15
|
+
it "has the right methods" do
|
16
|
+
expect(patentscope).to respond_to(:wsdl)
|
17
|
+
expect(patentscope).to respond_to(:get_available_documents)
|
18
|
+
expect(patentscope).to respond_to(:get_document_content)
|
19
|
+
expect(patentscope).to respond_to(:get_document_ocr_content)
|
20
|
+
expect(patentscope).to respond_to(:get_iasr)
|
21
|
+
expect(patentscope).to respond_to(:get_document_table_of_contents)
|
22
|
+
expect(patentscope).to respond_to(:get_document_content_page)
|
23
|
+
end
|
24
|
+
|
25
|
+
describe "wsdl method" do
|
26
|
+
it "returns a wsdl document" do
|
27
|
+
response = patentscope.wsdl
|
28
|
+
expect(response).to include('<?xml')
|
29
|
+
expect(response).to include('<wsdl:definitions')
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
describe "get_available_documents method" do
|
34
|
+
it 'returns an appropriate XML document for the get_available_documents operation' do
|
35
|
+
response = patentscope.get_available_documents('SG2009000062')
|
36
|
+
expect(response).to include('<?xml version="1.0"?>')
|
37
|
+
expect(response).to include('<doc ocrPresence="no" docType="RO101" docId="id00000008679651"/>')
|
38
|
+
expect(response).to_not include('<getAvailableDocumentsResponse xmlns="http://www.wipo.org/wsdl/ps">')
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
describe "get_document_content method" do
|
43
|
+
it 'returns an appropriate XML document for the get_document_content operation' do
|
44
|
+
response = patentscope.get_document_content('090063618004ca88')
|
45
|
+
expect(response).to include('<?xml version="1.0"?>')
|
46
|
+
expect(response).to include('<documentContent>')
|
47
|
+
expect(response).to include('nRpZsy7ezxU2/8/fk5JM6HIXReMWymXUCmhYcRgUIjjNk2pDAkdlxox7xiSLm')
|
48
|
+
expect(response).to_not include('<getDocumentContentResponse xmlns="http://www.wipo.org/wsdl/ps">')
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
describe "get_document_ocr_content method" do
|
53
|
+
it 'returns an appropriate XML document for the get_document_ocr_content operation' do
|
54
|
+
response = patentscope.get_document_ocr_content('id00000015801579')
|
55
|
+
expect(response).to include('<?xml version="1.0"?>')
|
56
|
+
expect(response).to include('<documentContent>')
|
57
|
+
expect(response).to include('XdDb9Ain4kev61wgZc36X022QPCEZZASS2Rwpcy4Hx7I5GYHhriRwpsDwoX9tgjgZwcEGGEksgthsHsNtkFmyGZYQIGGCCX3dhggRDTgEEDNgVgkvuw2ECDDSYMEF')
|
58
|
+
expect(response).to_not include('<getDocumentOcrContentResponse xmlns="http://www.wipo.org/wsdl/ps">')
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
describe "get_iasr method" do
|
63
|
+
it 'returns an appropriate XML document for the get_iasr operation' do
|
64
|
+
response = patentscope.get_iasr('SG2009000062')
|
65
|
+
expect(response).to include('<?xml version="1.0"?>')
|
66
|
+
expect(response).to include('<wo-international-application-status>')
|
67
|
+
expect(response).to include('MESENCHYMAL STEM CELL PARTICLES')
|
68
|
+
expect(response).to_not include('<getIASRResponse xmlns="http://www.wipo.org/wsdl/ps">')
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
describe "get_document_table_of_contents method" do
|
73
|
+
it 'returns an appropriate XML document for the get_document_table_of_contents operation' do
|
74
|
+
response = patentscope.get_document_table_of_contents('090063618004ca88')
|
75
|
+
expect(response).to include('<?xml version="1.0"?>')
|
76
|
+
expect(response).to include('<content>')
|
77
|
+
expect(response).to include('<content>000001.tif</content>')
|
78
|
+
expect(response).to_not include('<getDocumentTableOfContentsResponse xmlns="http://www.wipo.org/wsdl/ps">')
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
describe "get_document_content_page method" do
|
83
|
+
it 'returns an appropriate XML document for the get_document_content_page operation' do
|
84
|
+
response = patentscope.get_document_content_page('090063618004ca88', '000001.tif')
|
85
|
+
expect(response).to include('<?xml version="1.0"?>')
|
86
|
+
expect(response).to include('+GP0kv9dhgiY7Rb5h2q4RN6Jj9NpDCJjuMImO0l0TfLe7QRO2yFceTvvTu6C6qTH')
|
87
|
+
expect(response).to_not include('<getDocumentContentPageResponse xmlns="http://www.wipo.org/wsdl/ps">')
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|