rpi_marca 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.
@@ -0,0 +1,675 @@
1
+ require 'rpi_marca/publication'
2
+ require 'rpi_marca/exceptions'
3
+ require 'nokogiri'
4
+
5
+ describe RpiMarca::Publication do
6
+ # rubocop:disable Metrics/LineLength
7
+ PUBLICACAO_PROTOCOLO_COMPLETO = <<-XML
8
+ <processo numero="829142282">
9
+ <despachos>
10
+ <despacho codigo="IPAS270" nome="Deferimento de petição">
11
+ <texto-complementar>Protocolo: 810110405339 (17/03/2011) Petição (tipo): Anotação de transferência de titularidade decorrente de cisão (349.2) Procurador: CUSTODIO DE ALMEIDA CIA Cedente: I-PARK SOLUÇÕES TECNOLÓGICAS S.A. [BR] Cessionário: I-PARK SOLUÇÕES TECNOLÓGICAS S.A. Detalhes do despacho: ok!</texto-complementar>
12
+ <protocolo numero="810110405339" data="12/11/2009" codigoServico="3371">
13
+ <requerente nome-razao-social="G.A.R. GESTÃO E ADMINISTRAÇÃO E RODOVIAS LTDA" pais="BR" uf="SP"/>
14
+ <cedente nome-razao-social="K.V.M. COMÉRCIO E CONFECÇÕES LTDA-EPP" pais="BR" uf="SP"/>
15
+ <cessionario nome-razao-social="K.V.M. COMÉRCIO E CONFECÇÕES LTDA-EPP"/>
16
+ <procurador>PICOSSE E CALABRESE ADVOGADOS ASSOCIADOS</procurador>
17
+ </protocolo>
18
+ </despacho>
19
+ </despachos>
20
+ </processo>
21
+ XML
22
+
23
+ PUBLICACAO_DOIS_DESPACHOS = <<-XML
24
+ <processo numero="829142282">
25
+ <despachos>
26
+ <despacho codigo="IPAS270" nome="Deferimento de petição">
27
+ <texto-complementar>Protocolo: 810110405339 (17/03/2011) Petição (tipo): Anotação de transferência de titularidade decorrente de cisão (349.2) Procurador: CUSTODIO DE ALMEIDA CIA Cedente: I-PARK SOLUÇÕES TECNOLÓGICAS S.A. [BR] Cessionário: I-PARK SOLUÇÕES TECNOLÓGICAS S.A. Detalhes do despacho: ok!</texto-complementar>
28
+ <protocolo numero="810110405339" data="01/07/2013"/>
29
+ </despacho>
30
+ <despacho codigo="IPAS009" nome="Publicação de pedido de registro para oposição">
31
+ <texto-complementar/>
32
+ <protocolo numero="1010101010101010" data="01/12/2012"/>
33
+ </despacho>
34
+ </despachos>
35
+ </processo>
36
+ XML
37
+
38
+ PUBLICACAO_SEM_PROTOCOLO = <<-XML
39
+ <processo numero="828247935">
40
+ <despachos>
41
+ <despacho codigo="IPAS142" nome="Sobrestamento do exame de mérito">
42
+ <texto-complementar>Sobrestadores: Processo: 823129900 (MÓDULO E-SECURITY)</texto-complementar>
43
+ </despacho>
44
+ </despachos>
45
+ </processo>
46
+ XML
47
+
48
+ TEXTO_COMPLEMENTAR_COM_PROTOCOLO = <<-XML
49
+ <processo numero="905653858">
50
+ <despachos>
51
+ <despacho codigo="IPAS423" nome="Notificação de oposição para manifestação">
52
+ <texto-complementar>850130127025 de 02/07/2013, 850130131596 de 08/07/2013 e 850130122879 de 28/06/2013</texto-complementar>
53
+ </despacho>
54
+ </despachos>
55
+ </processo>
56
+ XML
57
+
58
+ PROCURADOR_SEM_PROTOCOLO = <<-XML
59
+ <processo numero="828247935">
60
+ <despachos>
61
+ <despacho codigo="IPAS142" nome="Sobrestamento do exame de mérito">
62
+ <texto-complementar>Sobrestadores: Processo: 823129900 (MÓDULO E-SECURITY)</texto-complementar>
63
+ </despacho>
64
+ </despachos>
65
+ <titulares>
66
+ <titular nome-razao-social="DIGITAL 21 PRODUÇÕES ARTISTICAS LTDA" pais="BR" uf="SP"/>
67
+ <titular nome-razao-social="BROOKFIELD RIO DE JANEIRO EMPREENDIMENTOS IMOBILIÁRIOS S/A." pais="BR" uf="RJ"/>
68
+ </titulares>
69
+ <procurador>LAURA GARKISCH MOREIRA</procurador>
70
+ <sobrestadores>
71
+ <sobrestador marca="MÓDULO E-SECURITY" processo="823129900"/>
72
+ </sobrestadores>
73
+ </processo>
74
+ XML
75
+
76
+ DEPOSITO = <<-XML
77
+ <processo data-deposito="25/08/2008" numero="829825584">
78
+ <despachos>
79
+ <despacho codigo="IPAS421" nome="Republicação de pedido para oposição">
80
+ <texto-complementar>por alteração na especificação</texto-complementar>
81
+ </despacho>
82
+ </despachos>
83
+ <titulares>
84
+ <titular nome-razao-social="OP SPORTS COMERCIAL LTDA EPP" pais="BR" uf="SP"/>
85
+ </titulares>
86
+ <marca apresentacao="Mista" natureza="De Serviço">
87
+ <nome>MC FARLANE TOYS</nome>
88
+ </marca>
89
+ <classes-vienna edicao="4">
90
+ <classe-vienna codigo="27.5.1"/>
91
+ <classe-vienna codigo="27.7.1"/>
92
+ </classes-vienna>
93
+ <classe-nice codigo="35" edicao="10">
94
+ <especificacao>COMÉRCIO VAREJISTA ATRAVÉS DE QUALQUER MEIO DE BONECOS, ESTÁTUAS, DIORAMAS, BRINQUEDOS COLECIONÁVEIS, RELACIONADOS A PERSONAGENS DE FILMES E SÉRIES DE TV E VIDEOGAMES.;</especificacao>
95
+ </classe-nice>
96
+ <prioridade-unionista>
97
+ <prioridade data="15/02/2012" numero="CTM 010645091" pais="IT"/>
98
+ </prioridade-unionista>
99
+ <apostila>SEM DIREITO AO USO EXCLUSIVO DA EXPRESSÃO &quot;TOYS&quot;.</apostila>
100
+ <procurador>ABM ASSESSORIA BRASILEIRA DE MARCAS LTDA.</procurador>
101
+ </processo>
102
+ XML
103
+
104
+ DEPOSITO_MARCA_FIGURATIVA = <<-XML
105
+ <processo data-deposito="25/08/2008" numero="829825584">
106
+ <despachos>
107
+ <despacho codigo="IPAS421" nome="Republicação de pedido para oposição">
108
+ <texto-complementar>por alteração na especificação</texto-complementar>
109
+ </despacho>
110
+ </despachos>
111
+ <titulares>
112
+ <titular nome-razao-social="OP SPORTS COMERCIAL LTDA EPP" pais="BR" uf="SP"/>
113
+ </titulares>
114
+ <marca apresentacao="Figurativa" natureza="De Serviço"/>
115
+ <classes-vienna edicao="4">
116
+ <classe-vienna codigo="27.5.1"/>
117
+ <classe-vienna codigo="27.7.1"/>
118
+ </classes-vienna>
119
+ <classe-nice codigo="35" edicao="10">
120
+ <especificacao>COMÉRCIO VAREJISTA ATRAVÉS DE QUALQUER MEIO DE BONECOS, ESTÁTUAS, DIORAMAS, BRINQUEDOS COLECIONÁVEIS, RELACIONADOS A PERSONAGENS DE FILMES E SÉRIES DE TV E VIDEOGAMES.;</especificacao>
121
+ </classe-nice>
122
+ <prioridade-unionista>
123
+ <prioridade data="15/02/2012" numero="CTM 010645091" pais="IT"/>
124
+ </prioridade-unionista>
125
+ <apostila>SEM DIREITO AO USO EXCLUSIVO DA EXPRESSÃO &quot;TOYS&quot;.</apostila>
126
+ <procurador>ABM ASSESSORIA BRASILEIRA DE MARCAS LTDA.</procurador>
127
+ </processo>
128
+ XML
129
+
130
+ DEPOSITO_MARCA_CERTIFIC = <<-XML
131
+ <processo numero="908163495" data-deposito="22/08/2014">
132
+ <despachos>
133
+ <despacho codigo="IPAS009" nome="Publicação de pedido de registro para oposição (exame formal concluído)"/>
134
+ </despachos>
135
+ <titulares>
136
+ <titular nome-razao-social="INSTITUTO INTERNET NO ESTADO DA ARTE - I-START" pais="BR" uf="SP"/>
137
+ </titulares>
138
+ <marca apresentacao="Mista" natureza="Certific.">
139
+ <nome>istart escola digital segura</nome>
140
+ </marca>
141
+ <classes-vienna edicao="4">
142
+ <classe-vienna codigo="26.4.9"/>
143
+ <classe-vienna codigo="27.5.1"/>
144
+ </classes-vienna>
145
+ <classe-nice codigo="42">
146
+ <especificacao>Certificação de A fim de promover sua missão junto às instituições de ensino, o i. Start desenvolveu o selo escola digital segura, uma ação pioneira de responsabilidade social digital. O selo escola digital segura auxilia a direção a incorporar as tecnologias da informação e comunicação ao ambiente escolar e implantar o uso seguro dos recursos de tecnologia educacional identificando e mitigando possíveis incidentes digitais. Assim o i. Start promove o reconhecimento das instituições de ensino que investem em infraestrutura, formulam e aplicam regulamentos e procedimentos para gestão da informação e dos recursos de tecnologia da informação e comunicação e ainda formam alunos e educadores para segurança da informação e ética digital. Diante desse cenário, o selo escola digital segura reconhece o valor das instituições de ensino que se comprometem com a orientação sobre ética e segurança digital, com indicadores distribuídos em quatro níveis: infraestrutura tecnológica, elaboração de regras e procedimentos quanto ao uso da tecnologia, capacitação de colaboradores e docentes e conscientização do corpo discente e de toda a comunidade relacionada. A conquista do certificado é simbolizada, em cada um dos níveis avaliados, pelo ¿selo escola digital segura¿, que permite à instituição de ensino dar publicidade aos esforços envidados no processo educacional para garantir o uso ético, seguro e legal da tecnologia.; </especificacao>
147
+ </classe-nice>
148
+ <procurador>Diego Perez Martin de Almeida</procurador>
149
+ </processo>
150
+ XML
151
+
152
+ DEPOSITO_NCL_SEM_EDICAO = <<-XML
153
+ <processo data-deposito="25/08/2008" numero="829825584">
154
+ <despachos>
155
+ <despacho codigo="IPAS421" nome="Republicação de pedido para oposição">
156
+ <texto-complementar>por alteração na especificação</texto-complementar>
157
+ </despacho>
158
+ </despachos>
159
+ <classe-nice codigo="35">
160
+ <especificacao>COMÉRCIO VAREJISTA ATRAVÉS DE QUALQUER MEIO DE BONECOS, ESTÁTUAS, DIORAMAS, BRINQUEDOS COLECIONÁVEIS, RELACIONADOS A PERSONAGENS DE FILMES E SÉRIES DE TV E VIDEOGAMES.;</especificacao>
161
+ </classe-nice>
162
+ </processo>
163
+ XML
164
+
165
+ PUBLICACAO_COM_CLASSE_NACIONAL = <<-XML
166
+ <processo data-deposito="25/08/2008" numero="829825584">
167
+ <despachos>
168
+ <despacho codigo="IPAS421" nome="Republicação de pedido para oposição">
169
+ <texto-complementar>por alteração na especificação</texto-complementar>
170
+ </despacho>
171
+ </despachos>
172
+ <classe-nacional codigo="25">
173
+ <especificacao>Teste</especificacao>
174
+ <sub-classes-nacional>
175
+ <sub-classe-nacional codigo="10"/>
176
+ <sub-classe-nacional codigo="20"/>
177
+ </sub-classes-nacional>
178
+ </classe-nacional>
179
+ </processo>
180
+ XML
181
+
182
+ CLASSE_NACIONAL_MAIS_DE_3_SUBCLASSES = <<-XML
183
+ <processo data-deposito="25/08/2008" numero="829825584">
184
+ <despachos>
185
+ <despacho codigo="IPAS421" nome="Republicação de pedido para oposição">
186
+ <texto-complementar>por alteração na especificação</texto-complementar>
187
+ </despacho>
188
+ </despachos>
189
+ <classe-nacional codigo="25">
190
+ <especificacao>Teste</especificacao>
191
+ <sub-classes-nacional>
192
+ <sub-classe-nacional codigo="10"/>
193
+ <sub-classe-nacional codigo="20"/>
194
+ <sub-classe-nacional codigo="30"/>
195
+ <sub-classe-nacional codigo="40"/>
196
+ </sub-classes-nacional>
197
+ </classe-nacional>
198
+ </processo>
199
+ XML
200
+
201
+ CLASSE_LOGOTIPO_MAIS_DE_5_SUBCLASSES = <<-XML
202
+ <processo data-deposito="25/08/2008" numero="829825584">
203
+ <despachos>
204
+ <despacho codigo="IPAS421" nome="Republicação de pedido para oposição">
205
+ <texto-complementar>por alteração na especificação</texto-complementar>
206
+ </despacho>
207
+ </despachos>
208
+ <classes-vienna edicao="4">
209
+ <classe-vienna codigo="27.5.1"/>
210
+ <classe-vienna codigo="27.7.1"/>
211
+ <classe-vienna codigo="27.9.1"/>
212
+ <classe-vienna codigo="27.11.1"/>
213
+ <classe-vienna codigo="27.13.1"/>
214
+ <classe-vienna codigo="27.15.1"/>
215
+ </classes-vienna>
216
+ </processo>
217
+ XML
218
+
219
+ PRIORIDADE_UNIONISTA_SEM_DATA = <<-XML
220
+ <processo data-deposito="25/08/2008" numero="829825584">
221
+ <despachos>
222
+ <despacho codigo="IPAS421" nome="Republicação de pedido para oposição">
223
+ <texto-complementar>por alteração na especificação</texto-complementar>
224
+ </despacho>
225
+ </despachos>
226
+ <prioridade-unionista>
227
+ <prioridade numero="CTM 010645091" pais="IT"/>
228
+ </prioridade-unionista>
229
+ </processo>
230
+ XML
231
+
232
+ CONCESSAO_REGISTRO = <<-XML
233
+ <processo data-concessao="10/05/2013" data-deposito="12/04/2010" data-vigencia="10/05/2023" numero="902488309">
234
+ <despachos>
235
+ <despacho codigo="IPAS158" nome="Concessão de registro">
236
+ <texto-complementar/>
237
+ </despacho>
238
+ </despachos>
239
+ </processo>
240
+ XML
241
+
242
+ CONCESSAO_REGISTRO_SEM_DATA_CONCESSAO = <<-XML
243
+ <processo data-deposito="12/04/2010" data-vigencia="10/05/2023" numero="902488309">
244
+ <despachos>
245
+ <despacho codigo="IPAS158" nome="Concessão de registro">
246
+ <texto-complementar/>
247
+ </despacho>
248
+ </despachos>
249
+ </processo>
250
+ XML
251
+
252
+ CONCESSAO_REGISTRO_SEM_DATA_VIGENCIA = <<-XML
253
+ <processo data-concessao="10/05/2013" data-deposito="12/04/2010" numero="902488309">
254
+ <despachos>
255
+ <despacho codigo="IPAS158" nome="Concessão de registro">
256
+ <texto-complementar/>
257
+ </despacho>
258
+ </despachos>
259
+ </processo>
260
+ XML
261
+
262
+ PUBLICACAO_ELEMENTO_NOVO_INVALIDO = <<-XML
263
+ <processo numero="829142282">
264
+ <despachos>
265
+ <despacho codigo="IPAS158" nome="Concessão de registro"/>
266
+ </despachos>
267
+ <foo/>
268
+ </processo>
269
+ XML
270
+ # rubocop:enable Metrics/LineLength
271
+
272
+ it 'aceita uma string contendo a publicação' do
273
+ publication = DEPOSITO
274
+
275
+ expect { RpiMarca::Publication.new(publication) }.not_to raise_error
276
+ end
277
+
278
+ it 'aceita um objeto `Nokogiri::XML::Element` contendo a publicação' do
279
+ publication = Nokogiri::XML(DEPOSITO).at_xpath('//processo')
280
+
281
+ expect { RpiMarca::Publication.new(publication) }.not_to raise_error
282
+ end
283
+
284
+ it 'erro ao instanciar com informações de publicação inválidas' do
285
+ class Foo; end
286
+
287
+ expect { RpiMarca::Publication.new(Foo.new) }
288
+ .to raise_error RpiMarca::ParseError
289
+ end
290
+
291
+ it 'erro quando um elemento novo/inválido for publicado' do
292
+ expect { RpiMarca::Publication.new(PUBLICACAO_ELEMENTO_NOVO_INVALIDO) }
293
+ .to raise_error RpiMarca::ParseError
294
+ end
295
+
296
+ context 'processo' do
297
+ it 'número é identificado corretamente' do
298
+ publication = RpiMarca::Publication.new(PUBLICACAO_PROTOCOLO_COMPLETO)
299
+
300
+ expect(publication.application).to eq '829142282'
301
+ end
302
+
303
+ it 'erro quando número não é identificado' do
304
+ expect { RpiMarca::Publication.new('<processo numero=""></processo>') }
305
+ .to raise_error(RpiMarca::ParseError)
306
+ end
307
+
308
+ it 'pode ter data de deposito' do
309
+ publication = RpiMarca::Publication.new(DEPOSITO)
310
+
311
+ expect(publication.filed_on).to eq Date.new(2008, 8, 25)
312
+ end
313
+
314
+ it 'pode ter data de concessão e vigência' do
315
+ publication = RpiMarca::Publication.new(CONCESSAO_REGISTRO)
316
+
317
+ expect(publication.granted_on).to eq Date.new(2013, 5, 10)
318
+ expect(publication.expires_on).to eq Date.new(2023, 5, 10)
319
+ end
320
+
321
+ it 'se tiver data de concessão deve ter data de vigência' do
322
+ expect { RpiMarca::Publication.new(CONCESSAO_REGISTRO_SEM_DATA_VIGENCIA) }
323
+ .to raise_error(RpiMarca::ParseError)
324
+ end
325
+
326
+ it 'se tiver data de vigência deve ter data de concessao' do
327
+ publication = CONCESSAO_REGISTRO_SEM_DATA_CONCESSAO
328
+ expect { RpiMarca::Publication.new(publication) }
329
+ .to raise_error(RpiMarca::ParseError)
330
+ end
331
+ end
332
+
333
+ context 'lista de despachos' do
334
+ it 'erro quando nenhum é publicado' do
335
+ publication = <<-XML
336
+ <processo numero="829142282">
337
+ <despachos/>
338
+ </processo>
339
+ XML
340
+
341
+ expect { RpiMarca::Publication.new(publication) }
342
+ .to raise_error(RpiMarca::ParseError)
343
+ end
344
+
345
+ it 'publicação com um despacho identificado corretamente' do
346
+ publication = RpiMarca::Publication.new(PUBLICACAO_PROTOCOLO_COMPLETO)
347
+
348
+ expect(publication.rules.length).to eq 1
349
+ end
350
+
351
+ it 'publicação com 2 despachos identificados corretamente' do
352
+ publication = RpiMarca::Publication.new(PUBLICACAO_DOIS_DESPACHOS)
353
+
354
+ expect(publication.rules.length).to eq 2
355
+ end
356
+ end
357
+
358
+ context 'despacho' do
359
+ it 'erro quando não possuir código IPAS' do
360
+ publication = <<-XML
361
+ <processo numero="829142282">
362
+ <despachos>
363
+ <despacho codigo=""/>
364
+ </despachos>
365
+ </processo>
366
+ XML
367
+
368
+ expect { RpiMarca::Publication.new(publication) }
369
+ .to raise_error(RpiMarca::ParseError)
370
+ end
371
+
372
+ it 'erro quando não possuir descrição do código IPAS' do
373
+ publication = <<-XML
374
+ <processo numero="829142282">
375
+ <despachos>
376
+ <despacho codigo="IPAS009"/>
377
+ </despachos>
378
+ </processo>
379
+ XML
380
+
381
+ expect { RpiMarca::Publication.new(publication) }
382
+ .to raise_error(RpiMarca::ParseError)
383
+ end
384
+
385
+ it 'primeiro despacho tem dados corretos' do
386
+ publication = RpiMarca::Publication.new(PUBLICACAO_DOIS_DESPACHOS)
387
+ rule = publication.rules.first
388
+
389
+ expect(rule.ipas).to eq 'IPAS270'
390
+ expect(rule.receipt.number).to eq '810110405339'
391
+ expect(rule.receipt.date).to eq Date.new(2013, 7, 1)
392
+ expect(rule.complement)
393
+ .to eq 'Protocolo: 810110405339 (17/03/2011) Petição (tipo): Anotação' \
394
+ ' de transferência de titularidade decorrente de cisão (349.2) ' \
395
+ 'Procurador: CUSTODIO DE ALMEIDA CIA Cedente: I-PARK SOLUÇÕES ' \
396
+ 'TECNOLÓGICAS S.A. [BR] Cessionário: I-PARK SOLUÇÕES TECNOLÓGICAS ' \
397
+ 'S.A. Detalhes do despacho: ok!'
398
+ end
399
+
400
+ it 'segundo despacho tem dados corretos' do
401
+ publication = RpiMarca::Publication.new(PUBLICACAO_DOIS_DESPACHOS)
402
+ rule = publication.rules[1] # segundo
403
+
404
+ expect(rule.ipas).to eq 'IPAS009'
405
+ expect(rule.receipt.number).to eq '1010101010101010'
406
+ expect(rule.receipt.date).to eq Date.new(2012, 12, 1)
407
+ expect(rule.complement).to be_nil
408
+ end
409
+ end
410
+
411
+ context 'protocolo' do
412
+ it 'deve ter protocolo para despachos onde é obrigatório' do
413
+ # rubocop:disable Metrics/LineLength
414
+ xml = <<-XML
415
+ <processo numero="905653858">
416
+ <despachos>
417
+ <despacho codigo="IPAS270" nome="Notificação de oposição para manifestação">
418
+ <texto-complementar>850130127025 de 02/07/2013, 850130131596 de 08/07/2013 e 850130122879 de 28/06/2013</texto-complementar>
419
+ </despacho>
420
+ </despachos>
421
+ </processo>
422
+ XML
423
+ # rubocop:enable Metrics/LineLength
424
+
425
+ expect { RpiMarca::Publication.new(xml) }
426
+ .to raise_error(RpiMarca::ParseError)
427
+ end
428
+
429
+ it 'não tem protocolo para despachos onde não é obrigatório' do
430
+ expect { RpiMarca::Publication.new(PUBLICACAO_SEM_PROTOCOLO) }
431
+ .not_to raise_error
432
+ end
433
+
434
+ it 'protocolo tem dados corretos' do
435
+ publication = RpiMarca::Publication.new(PUBLICACAO_PROTOCOLO_COMPLETO)
436
+ rule = publication.rules.first
437
+ receipt = rule.receipt
438
+
439
+ expect(receipt.number).to eq '810110405339'
440
+ expect(receipt.date).to eq Date.new(2009, 11, 12)
441
+ expect(receipt.service_code).to eq '337.1'
442
+
443
+ end
444
+
445
+ it 'pode ter texto complementar' do
446
+ # rubocop:disable Metrics/LineLength
447
+ xml = <<-XML
448
+ <processo numero="905653858">
449
+ <despachos>
450
+ <despacho codigo="IPAS423" nome="Notificação de oposição para manifestação">
451
+ <texto-complementar>850130127025 de 02/07/2013, 850130131596 de 08/07/2013 e 850130122879 de 28/06/2013</texto-complementar>
452
+ </despacho>
453
+ </despachos>
454
+ </processo>
455
+ XML
456
+ # rubocop:enable Metrics/LineLength
457
+
458
+ publication = RpiMarca::Publication.new(xml)
459
+ rule = publication.rules.first
460
+
461
+ expect(rule.complement).to eq '850130127025 de 02/07/2013, ' \
462
+ '850130131596 de 08/07/2013 e 850130122879 de 28/06/2013'
463
+ end
464
+
465
+ it 'texto complementar pode conter outros protocolos' do
466
+ publication = RpiMarca::Publication.new(TEXTO_COMPLEMENTAR_COM_PROTOCOLO)
467
+ rule = publication.rules.last
468
+
469
+ expect(rule.complementary_receipts.length).to eq 3
470
+
471
+ receipt1 = rule.complementary_receipts.first
472
+ expect(receipt1.number).to eq '850130127025'
473
+ expect(receipt1.date).to eq Date.new(2013, 7, 2)
474
+
475
+ receipt3 = rule.complementary_receipts.last
476
+ expect(receipt3.number).to eq '850130122879'
477
+ expect(receipt3.date).to eq Date.new(2013, 6, 28)
478
+ end
479
+
480
+ it 'pode ter procurador' do
481
+ publication = RpiMarca::Publication.new(PUBLICACAO_PROTOCOLO_COMPLETO)
482
+ rule = publication.rules.first
483
+ receipt = rule.receipt
484
+
485
+ expect(receipt.agent)
486
+ .to eq 'PICOSSE E CALABRESE ADVOGADOS ASSOCIADOS'
487
+ end
488
+
489
+ it 'pode ter requerente' do
490
+ publication = RpiMarca::Publication.new(PUBLICACAO_PROTOCOLO_COMPLETO)
491
+ rule = publication.rules.first
492
+ receipt = rule.receipt
493
+ applicant = receipt.applicant
494
+
495
+ expect(applicant.name)
496
+ .to eq 'G.A.R. GESTÃO E ADMINISTRAÇÃO E RODOVIAS LTDA'
497
+ expect(applicant.country).to eq 'BR'
498
+ expect(applicant.state).to eq 'SP'
499
+ end
500
+
501
+ it 'pode ter cedente e cessionário' do
502
+ publication = RpiMarca::Publication.new(PUBLICACAO_PROTOCOLO_COMPLETO)
503
+ rule = publication.rules.first
504
+ receipt = rule.receipt
505
+ assignor = receipt.assignor
506
+ assignee = receipt.assignee
507
+
508
+ expect(assignor).not_to be_nil
509
+ expect(assignor.name)
510
+ .to eq 'K.V.M. COMÉRCIO E CONFECÇÕES LTDA-EPP'
511
+ expect(assignor.country).to eq 'BR'
512
+ expect(assignor.state).to eq 'SP'
513
+
514
+ expect(assignee).not_to be_nil
515
+ expect(assignee.name)
516
+ .to eq 'K.V.M. COMÉRCIO E CONFECÇÕES LTDA-EPP'
517
+ expect(assignee.country).to be_nil
518
+ expect(assignee.state).to be_nil
519
+ end
520
+ end
521
+
522
+ context 'classificação NCL, nacional e de logotipo' do
523
+ it 'pode ter classificação NCL' do
524
+ publication = RpiMarca::Publication.new(DEPOSITO)
525
+
526
+ expect(publication.ncl).not_to be_nil
527
+ expect(publication.ncl.number).to eq '35'
528
+ expect(publication.ncl.edition).to eq 10
529
+ expect(publication.ncl.goods_services)
530
+ .to eq 'COMÉRCIO VAREJISTA ATRAVÉS DE QUALQUER MEIO DE BONECOS, ' \
531
+ 'ESTÁTUAS, DIORAMAS, BRINQUEDOS COLECIONÁVEIS, RELACIONADOS A ' \
532
+ 'PERSONAGENS DE FILMES E SÉRIES DE TV E VIDEOGAMES.;'
533
+ end
534
+
535
+ it 'classificação NCL pode vir sem edição' do
536
+ publication = RpiMarca::Publication.new(DEPOSITO_NCL_SEM_EDICAO)
537
+
538
+ expect(publication.ncl).not_to be_nil
539
+ expect(publication.ncl.number).to eq '35'
540
+ expect(publication.ncl.edition).to be_nil
541
+ expect(publication.ncl.goods_services)
542
+ .to eq 'COMÉRCIO VAREJISTA ATRAVÉS DE QUALQUER MEIO DE BONECOS, ' \
543
+ 'ESTÁTUAS, DIORAMAS, BRINQUEDOS COLECIONÁVEIS, RELACIONADOS A ' \
544
+ 'PERSONAGENS DE FILMES E SÉRIES DE TV E VIDEOGAMES.;'
545
+ end
546
+
547
+ it 'pode ter classificação nacional' do
548
+ publication = RpiMarca::Publication.new(PUBLICACAO_COM_CLASSE_NACIONAL)
549
+
550
+ expect(publication.national_class).not_to be_nil
551
+ expect(publication.national_class.number).to eq 25
552
+ expect(publication.national_class.subclass1).to eq 10
553
+ expect(publication.national_class.subclass2).to eq 20
554
+ expect(publication.national_class.subclass3).to eq nil
555
+ expect(publication.national_class.goods_services).to eq 'Teste'
556
+ end
557
+
558
+ it 'classificação nacional não pode ter mais de 3 subclasses' do
559
+ expect { RpiMarca::Publication.new(CLASSE_NACIONAL_MAIS_DE_3_SUBCLASSES) }
560
+ .to raise_error(RpiMarca::ParseError)
561
+ end
562
+
563
+ it 'pode ter classificação de logotipo' do
564
+ publication = RpiMarca::Publication.new(DEPOSITO)
565
+
566
+ expect(publication.vienna_class).not_to be_nil
567
+ expect(publication.vienna_class.edition).to eq 4
568
+ expect(publication.vienna_class.subclass1).to eq '27.5.1'
569
+ expect(publication.vienna_class.subclass2).to eq '27.7.1'
570
+ expect(publication.vienna_class.subclass3).to be_nil
571
+ expect(publication.vienna_class.subclass4).to be_nil
572
+ expect(publication.vienna_class.subclass5).to be_nil
573
+ end
574
+
575
+ it 'classificação de logotipo não pode ter mais de 5 classes' do
576
+ expect { RpiMarca::Publication.new(CLASSE_LOGOTIPO_MAIS_DE_5_SUBCLASSES) }
577
+ .to raise_error(RpiMarca::ParseError)
578
+ end
579
+ end
580
+
581
+ context 'publicação' do
582
+ it 'pode ter titulares' do
583
+ publication = RpiMarca::Publication.new(PROCURADOR_SEM_PROTOCOLO)
584
+ expect(publication.owners).not_to be_empty
585
+ end
586
+
587
+ it 'primeiro titular tem dados corretos' do
588
+ publication = RpiMarca::Publication.new(PROCURADOR_SEM_PROTOCOLO)
589
+
590
+ owner = publication.owners.first
591
+ expect(owner.name)
592
+ .to eq 'DIGITAL 21 PRODUÇÕES ARTISTICAS LTDA'
593
+ expect(owner.country).to eq 'BR'
594
+ expect(owner.state).to eq 'SP'
595
+ end
596
+
597
+ it 'segundo titular tem dados corretos' do
598
+ publication = RpiMarca::Publication.new(PROCURADOR_SEM_PROTOCOLO)
599
+
600
+ owner = publication.owners.last
601
+ expect(owner.name)
602
+ .to eq 'BROOKFIELD RIO DE JANEIRO EMPREENDIMENTOS IMOBILIÁRIOS S/A.'
603
+ expect(owner.country).to eq 'BR'
604
+ expect(owner.state).to eq 'RJ'
605
+ end
606
+
607
+ it 'pode ter marca' do
608
+ publication = RpiMarca::Publication.new(DEPOSITO)
609
+
610
+ expect(publication.trademark).to eq 'MC FARLANE TOYS'
611
+ end
612
+
613
+ it 'não tem marca quando for Figurativa ou Tridimensional' do
614
+ publication = RpiMarca::Publication.new(DEPOSITO_MARCA_FIGURATIVA)
615
+
616
+ expect(publication.trademark).to be_nil
617
+ end
618
+
619
+ it 'pode ter apresentação' do
620
+ publication = RpiMarca::Publication.new(DEPOSITO)
621
+
622
+ expect(publication.kind).to eq 'Mista'
623
+ end
624
+
625
+ it 'pode ter natureza' do
626
+ publication = RpiMarca::Publication.new(DEPOSITO)
627
+
628
+ expect(publication.nature).to eq 'De Serviço'
629
+ end
630
+
631
+ it "natureza 'Certificação' é normalizada" do
632
+ publication = RpiMarca::Publication.new(DEPOSITO_MARCA_CERTIFIC)
633
+
634
+ expect(publication.nature).to eq 'Certificação'
635
+ end
636
+
637
+ it 'pode ter procurador' do
638
+ publication = RpiMarca::Publication.new(PROCURADOR_SEM_PROTOCOLO)
639
+ expect(publication.agent).to eq 'LAURA GARKISCH MOREIRA'
640
+ end
641
+
642
+ it 'pode ter apostila' do
643
+ publication = RpiMarca::Publication.new(DEPOSITO)
644
+
645
+ expect(publication.disclaimer)
646
+ .to eq 'SEM DIREITO AO USO EXCLUSIVO DA EXPRESSÃO "TOYS".'
647
+ end
648
+
649
+ it 'pode ter prioridade unionista' do
650
+ publication = RpiMarca::Publication.new(DEPOSITO)
651
+ priority = publication.priorities.first
652
+
653
+ expect(priority).not_to be_nil
654
+ expect(priority.number).to eq 'CTM 010645091'
655
+ expect(priority.date).to eq Date.new(2012, 2, 15)
656
+ expect(priority.country).to eq 'IT'
657
+ end
658
+
659
+ it 'prioridade unionista deve ter data da prioridade' do
660
+ expect { RpiMarca::Publication.new(PRIORIDADE_UNIONISTA_SEM_DATA) }
661
+ .to raise_error(RpiMarca::ParseError)
662
+ end
663
+
664
+ it 'pode ter processos sobrestadores' do
665
+ publication = RpiMarca::Publication.new(PROCURADOR_SEM_PROTOCOLO)
666
+
667
+ previous_applications = publication.previous_applications
668
+ expect(previous_applications).not_to be_nil
669
+
670
+ previous_application = previous_applications.first
671
+ expect(previous_application.application).to eq '823129900'
672
+ expect(previous_application.trademark).to eq 'MÓDULO E-SECURITY'
673
+ end
674
+ end
675
+ end
@@ -0,0 +1,14 @@
1
+ require 'simplecov'
2
+ SimpleCov.start do
3
+ # add_filter "/spec/"
4
+ end
5
+
6
+ RSpec.configure do |config|
7
+ config.expect_with :rspec do |expectations|
8
+ expectations.include_chain_clauses_in_custom_matcher_descriptions = true
9
+ end
10
+
11
+ config.mock_with :rspec do |mocks|
12
+ mocks.verify_partial_doubles = true
13
+ end
14
+ end