twimock 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (55) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +23 -0
  3. data/.rspec +2 -0
  4. data/.travis.yml +5 -0
  5. data/Gemfile +4 -0
  6. data/LICENSE.txt +22 -0
  7. data/README.md +125 -0
  8. data/Rakefile +6 -0
  9. data/db/.gitkeep +0 -0
  10. data/lib/twimock/access_token.rb +31 -0
  11. data/lib/twimock/api/account/verify_credentials.rb +40 -0
  12. data/lib/twimock/api/application.rb +29 -0
  13. data/lib/twimock/api/intent/sessions.rb +60 -0
  14. data/lib/twimock/api/oauth/access_token.rb +65 -0
  15. data/lib/twimock/api/oauth/authenticate.rb +51 -0
  16. data/lib/twimock/api/oauth/request_token.rb +49 -0
  17. data/lib/twimock/api/oauth.rb +83 -0
  18. data/lib/twimock/api.rb +35 -0
  19. data/lib/twimock/application.rb +21 -0
  20. data/lib/twimock/auth_hash.rb +8 -0
  21. data/lib/twimock/config.rb +90 -0
  22. data/lib/twimock/database/table.rb +359 -0
  23. data/lib/twimock/database.rb +133 -0
  24. data/lib/twimock/errors.rb +13 -0
  25. data/lib/twimock/omniauth/strategies/twitter.rb +28 -0
  26. data/lib/twimock/omniauth_twitter.rb +36 -0
  27. data/lib/twimock/request_token.rb +23 -0
  28. data/lib/twimock/user.rb +58 -0
  29. data/lib/twimock/version.rb +3 -0
  30. data/lib/twimock.rb +39 -0
  31. data/spec/spec_helper.rb +18 -0
  32. data/spec/support/api_spec_helper.rb +30 -0
  33. data/spec/support/omniauth_twitter_helper.rb +26 -0
  34. data/spec/support/tables_helper.rb +54 -0
  35. data/spec/support/test_application_helper.rb +9 -0
  36. data/spec/twimock/access_token_spec.rb +128 -0
  37. data/spec/twimock/api/account/verify_credentials_spec.rb +125 -0
  38. data/spec/twimock/api/application_spec.rb +27 -0
  39. data/spec/twimock/api/intent/sessions_spec.rb +184 -0
  40. data/spec/twimock/api/oauth/access_token_spec.rb +185 -0
  41. data/spec/twimock/api/oauth/authenticate_spec.rb +96 -0
  42. data/spec/twimock/api/oauth/request_token_spec.rb +123 -0
  43. data/spec/twimock/api_spec.rb +81 -0
  44. data/spec/twimock/application_spec.rb +120 -0
  45. data/spec/twimock/auth_hash_spec.rb +7 -0
  46. data/spec/twimock/config_spec.rb +192 -0
  47. data/spec/twimock/database/table_spec.rb +769 -0
  48. data/spec/twimock/database_spec.rb +261 -0
  49. data/spec/twimock/omniauth_twitter_spec.rb +129 -0
  50. data/spec/twimock/request_token_spec.rb +140 -0
  51. data/spec/twimock/user_spec.rb +271 -0
  52. data/spec/twimock_spec.rb +76 -0
  53. data/twimock.gemspec +38 -0
  54. data/view/authenticate.html.erb +23 -0
  55. metadata +343 -0
@@ -0,0 +1,769 @@
1
+ require 'spec_helper'
2
+
3
+ describe Twimock::Database::Table do
4
+ include TableHelper
5
+
6
+ let(:db_name) { ".test" }
7
+ let(:table_name) { :tables }
8
+ let(:column_names) { [ :id, :text, :active, :number, :created_at ] }
9
+ let(:children) { [] }
10
+
11
+ before do
12
+ stub_const("Twimock::Database::DEFAULT_DB_NAME", db_name)
13
+ create_tables_table_for_test
14
+ end
15
+
16
+ after do
17
+ Twimock::Database.new.drop
18
+ remove_dynamically_defined_all_method
19
+ end
20
+
21
+ describe '::TABLE_NAME' do
22
+ subject { Twimock::Database::Table::TABLE_NAME }
23
+ it { is_expected.to eq table_name }
24
+ end
25
+
26
+ describe '::COLUMN_NAMES' do
27
+ subject { Twimock::Database::Table::COLUMN_NAMES }
28
+ it { is_expected.to eq column_names }
29
+ end
30
+
31
+ describe '::CHILDREN' do
32
+ subject { Twimock::Database::Table::CHILDREN }
33
+ it { is_expected.to eq children }
34
+ end
35
+
36
+ describe '#initialize' do
37
+ context 'without option' do
38
+ it 'should have accessor of column' do
39
+ @table = Twimock::Database::Table.new
40
+ column_names.each do |column_name|
41
+ if column_name == :active
42
+ expect(@table.send(column_name)).to be false
43
+ else
44
+ expect(@table.send(column_name)).to be_nil
45
+ end
46
+ end
47
+
48
+ @table.id = id = 1
49
+ @table.text = text = "test"
50
+ @table.active = active = true
51
+ @table.number = number = 0
52
+ @table.created_at = created_at = Time.now
53
+ expect(@table.id).to eq id
54
+ expect(@table.text).to eq text
55
+ expect(@table.active).to eq active
56
+ expect(@table.number).to eq number
57
+ expect(@table.created_at).to eq created_at
58
+
59
+ expect(lambda{ @table.name }).to raise_error NoMethodError
60
+ expect(lambda{ @table.name = nil }).to raise_error NoMethodError
61
+ end
62
+ end
63
+
64
+ context 'with option' do
65
+ it 'should have accessor of column' do
66
+ options = { id: 1, text: "test", active: true, number: 0, created_at: Time.now }
67
+ @table = Twimock::Database::Table.new(options)
68
+ options.each_key do |key|
69
+ expect(@table.send(key)).to eq options[key]
70
+ end
71
+ end
72
+ end
73
+ end
74
+
75
+ describe '#save!' do
76
+ before { @table = Twimock::Database::Table.new }
77
+
78
+ context 'when text does not set value' do
79
+ subject { lambda { @table.save! } }
80
+ it { is_expected.to raise_error }
81
+ end
82
+
83
+ context 'when text and number set value' do
84
+ before do
85
+ @table.text = @text = "test"
86
+ @table.number = @number = 0
87
+ end
88
+
89
+ context 'without option' do
90
+ context 'when id and created_at are nil' do
91
+ it 'should set value to id and created_at' do
92
+ expect(@table.id).to be_nil
93
+ expect(@table.text).to eq @text
94
+ expect(@table.active).to eq false
95
+ expect(@table.number).to eq @number
96
+ expect(@table.created_at).to be_nil
97
+ @table.save!
98
+ expect(@table.id).to be > 0
99
+ expect(@table.text).to eq @text
100
+ expect(@table.active).to eq false
101
+ expect(@table.number).to eq @number
102
+ expect(@table.created_at).to be <= Time.now
103
+ end
104
+ end
105
+
106
+ context 'when id is specified but record does not exist' do
107
+ before { @table.id = @id = 1 }
108
+
109
+ it 'should set value to created_at and id does not change' do
110
+ expect(@table.id).to eq @id
111
+ expect(@table.text).to eq @text
112
+ expect(@table.active).to eq false
113
+ expect(@table.number).to eq @number
114
+ expect(@table.created_at).to be_nil
115
+ @table.save!
116
+ expect(@table.id).to eq @id
117
+ expect(@table.text).to eq @text
118
+ expect(@table.active).to eq false
119
+ expect(@table.number).to eq @number
120
+ expect(@table.created_at).to be <= Time.now
121
+ end
122
+ end
123
+
124
+ context 'when id is specified and record exists' do
125
+ before { @table.save! }
126
+
127
+ it 'should not change id and created_at' do
128
+ id = @table.id
129
+ created_at = @table.created_at
130
+ @table.save!
131
+ expect(@table.id).to eq id
132
+ expect(@table.created_at).to eq created_at
133
+ end
134
+ end
135
+ end
136
+
137
+ context 'with option' do
138
+ context 'that are id and text, active, number, created_at' do
139
+ context 'instance attributes does not set values without text' do
140
+ before do
141
+ @id = 100
142
+ @text = "hogehoge"
143
+ @active = true
144
+ @number = 0
145
+ @created_at = Time.now + 1000
146
+ @options = { id: @id, text: @text, active: @active, number: @number, created_at: @created_at }
147
+ end
148
+
149
+ it 'should set specified value by option withou created_at' do
150
+ @table.save!(@options)
151
+ expect(@table.id).to eq @id
152
+ expect(@table.text).to eq @text
153
+ expect(@table.active).to eq @active
154
+ expect(@table.number).to eq @number
155
+ expect(@table.created_at).not_to eq @created_at
156
+ end
157
+ end
158
+
159
+ context 'instance all attributes set values' do
160
+ before do
161
+ @table.id = @setting_id = 10
162
+ @setting_text = @text
163
+ @setting_active = @active
164
+ @setting_number = @number
165
+ @table.created_at = @setting_created_at = Time.now - 1000
166
+ @options_id = 100
167
+ @options_text = "hogehoge"
168
+ @options_active = false
169
+ @options_number = 1
170
+ @options_created_at = Time.now + 1000
171
+ @options = { id: @options_id,
172
+ text: @options_text,
173
+ active: @options_active,
174
+ number: @options_number,
175
+ created_at: @options_created_at }
176
+ end
177
+
178
+ it 'should set specified value by option withou created_at' do
179
+ @table.save!(@options)
180
+ expect(@table.id).to eq @options_id
181
+ expect(@table.text).to eq @options_text
182
+ expect(@table.active).to eq @options_active
183
+ expect(@table.number).to eq @options_number
184
+ expect(@table.created_at).not_to eq @options_created_at
185
+ expect(@table.created_at).not_to eq @setting_created_at
186
+ end
187
+ end
188
+ end
189
+ end
190
+ end
191
+ end
192
+
193
+ describe '#create!' do
194
+ context 'without option' do
195
+ subject { lambda { Twimock::Database::Table.create! } }
196
+ it { is_expected.to raise_error Twimock::Errors::ColumnTypeNotNull }
197
+ end
198
+
199
+ context 'with options that cloumns are not null' do
200
+ before do
201
+ @options = { id: 1, text: "test", active: true, number: 0, created_at: Time.now }
202
+ end
203
+
204
+ it 'should new and save and return saved object' do
205
+ table = Twimock::Database::Table.create!(@options)
206
+ expect(table).to be_kind_of(Twimock::Database::Table)
207
+ column_names.each do |column_name|
208
+ value = table.send(column_name)
209
+ if column_name == :created_at
210
+ expect(value).to be_kind_of Time
211
+ else
212
+ expect(value).to eq @options[column_name]
213
+ end
214
+ end
215
+ end
216
+ end
217
+ end
218
+
219
+ describe '#update_attributes!' do
220
+ before { @table = Twimock::Database::Table.new({text: "test", number: 1}) }
221
+
222
+ context 'without options' do
223
+ subject { lambda { @table.update_attributes! } }
224
+ it { is_expected.to raise_error ArgumentError }
225
+ end
226
+
227
+ context 'with options' do
228
+ context 'before save!' do
229
+ subject { @table.update_attributes!({ created_at: Time.now }) }
230
+ it { is_expected.to eq true }
231
+
232
+ context 'that does not include column name' do
233
+ before { @options = { hoge: "hoge" } }
234
+ subject { lambda { @table.update_attributes!(@options) } }
235
+ it { is_expected.to raise_error NoMethodError }
236
+ end
237
+
238
+ context 'that is id' do
239
+ it 'should set specified value by option' do
240
+ id = 100
241
+ @table.update_attributes!({ id: id })
242
+ expect(id).to eq id
243
+ end
244
+
245
+ it 'should set specified value by option when instance id is set' do
246
+ @table.id = 10
247
+ id = 100
248
+ @table.update_attributes!({ id: id })
249
+ expect(id).to eq id
250
+ end
251
+ end
252
+
253
+ context 'that is text' do
254
+ context 'but instance does not set value to text' do
255
+ it 'should change created_at value' do
256
+ table = Twimock::Database::Table.new
257
+ expect(lambda { table.update_attributes!({ text: "test" }) }).to raise_error
258
+ end
259
+ end
260
+
261
+ context 'but instance is set value to text' do
262
+ it 'should not change created_at value' do
263
+ text = "text"
264
+ table = Twimock::Database::Table.new({ text: text, number: 1 })
265
+ table.update_attributes!({ text: text })
266
+ expect(table.text).to eq text
267
+ end
268
+ end
269
+ end
270
+
271
+ context 'that is created_at' do
272
+ it 'should ignore the value' do
273
+ created_at = Time.now + 60
274
+ @table.update_attributes!({ created_at: created_at })
275
+ expect(@table.created_at).not_to eq created_at
276
+ end
277
+ end
278
+ end
279
+
280
+ context 'after save!' do
281
+ before { @table.save! }
282
+
283
+ subject { @table.update_attributes!({ created_at: @table.created_at + 60 }) }
284
+ it { is_expected.to eq true }
285
+
286
+ context 'with option that does not include column name' do
287
+ before { @options = { hoge: "hoge" } }
288
+ subject { lambda { @table.update_attributes!(@options) } }
289
+ it { is_expected.to raise_error NoMethodError }
290
+ end
291
+
292
+ context 'when any column values does not change' do
293
+ it 'should not change created_at value' do
294
+ created_at = @table.created_at
295
+ @table.update_attributes!({ created_at: created_at })
296
+ expect(@table.created_at).to eq created_at
297
+ end
298
+ end
299
+
300
+ context 'when created_at column changes' do
301
+ it 'should change created_at value' do
302
+ created_at = @table.created_at + 60
303
+ @table.update_attributes!({ created_at: created_at })
304
+ expect(@table.created_at).to eq created_at
305
+ end
306
+ end
307
+ end
308
+ end
309
+ end
310
+
311
+ describe '#persisted?' do
312
+ before do
313
+ @table = Twimock::Database::Table.new({ text: "test", number: 1 })
314
+ end
315
+
316
+ context 'before save' do
317
+ subject { @table.persisted? }
318
+ it { is_expected.to be false }
319
+ end
320
+
321
+ context 'after save' do
322
+ before { @table.save! }
323
+ subject { @table.persisted? }
324
+ it { is_expected.to be true }
325
+ end
326
+ end
327
+
328
+ describe '#destroy!' do
329
+ before { @table = Twimock::Database::Table.new({ text: "test", number: 1 }) }
330
+
331
+ context 'before record is saved' do
332
+ subject { lambda { @table.destroy } }
333
+ it { is_expected.to raise_error RuntimeError }
334
+ end
335
+
336
+ context 'after records is saved' do
337
+ before { @table.save! }
338
+ subject { lambda { @table.destroy } }
339
+ it { is_expected.not_to raise_error }
340
+ end
341
+
342
+ context 'when tables table has two record' do
343
+ before do
344
+ @table.save!
345
+ Twimock::Database::Table.new({text: "test", number: 1}).save!
346
+ end
347
+
348
+ it 'should delete one record' do
349
+ expect(Twimock::Database::Table.all.count).to eq 2
350
+ @table.destroy
351
+ expect(Twimock::Database::Table.all.count).to eq 1
352
+ expect(Twimock::Database::Table.find_by_id(@table.id)).to eq nil
353
+ end
354
+ end
355
+ end
356
+
357
+ describe '.all' do
358
+ context 'when tables record does not exist' do
359
+ subject { Twimock::Database::Table.all }
360
+
361
+ it { is_expected.to be_kind_of Array }
362
+ it { is_expected.to be_empty }
363
+ end
364
+
365
+ context 'when tables record exists' do
366
+ before do
367
+ @ids = 3.times.inject([]) do |ary, i|
368
+ table = Twimock::Database::Table.new({text: "test", number: 1})
369
+ table.save!
370
+ ary << table.id
371
+ end
372
+ end
373
+
374
+ it 'should be array and should have three Table instances' do
375
+ tables = Twimock::Database::Table.all
376
+ expect(tables).to be_kind_of Array
377
+ expect(tables.count).to eq 3
378
+ tables.each do |table|
379
+ expect(table).to be_kind_of Twimock::Database::Table
380
+ expect(@ids).to be_include table.id
381
+ end
382
+ end
383
+ end
384
+ end
385
+
386
+ describe '.first' do
387
+ context 'when tables record does not exist' do
388
+ subject { Twimock::Database::Table.first }
389
+ it { is_expected.to be_nil }
390
+ end
391
+
392
+ context 'when tables record exists' do
393
+ before do
394
+ @ids = 3.times.inject([]) do |ary, i|
395
+ table = Twimock::Database::Table.new({text: "test", number: 1})
396
+ table.save!
397
+ ary << table.id
398
+ end
399
+ end
400
+
401
+ it 'should be Table instances and id is the smallest' do
402
+ finded = Twimock::Database::Table.first
403
+ expect(finded).to be_kind_of Twimock::Database::Table
404
+ expect(finded.id).to eq @ids.sort.first
405
+ end
406
+ end
407
+ end
408
+
409
+ describe '.last' do
410
+ context 'when tables record does not exist' do
411
+ subject { Twimock::Database::Table.last }
412
+ it { is_expected.to be_nil }
413
+ end
414
+
415
+ context 'when tables record exists' do
416
+ before do
417
+ @ids = 3.times.inject([]) do |ary, i|
418
+ table = Twimock::Database::Table.new({text: "test", number: 1})
419
+ table.save!
420
+ ary << table.id
421
+ end
422
+ end
423
+
424
+ it 'should be Table instances and id is biggest' do
425
+ finded = Twimock::Database::Table.last
426
+ expect(finded).to be_kind_of Twimock::Database::Table
427
+ expect(finded.id).to eq @ids.sort.last
428
+ end
429
+ end
430
+ end
431
+
432
+ describe '.where' do
433
+ context 'when tables record does not exist' do
434
+ subject { Twimock::Database::Table.where(id: 1) }
435
+ it { is_expected.to be_kind_of Array }
436
+ it { is_expected.to be_empty }
437
+ end
438
+
439
+ context 'when tables record exists' do
440
+ before do
441
+ @ids = 3.times.inject([]) do |ary, i|
442
+ table = Twimock::Database::Table.new({text: "test", number: 1})
443
+ table.save!
444
+ ary << table.id
445
+ end
446
+ end
447
+
448
+ it 'should be Array and should have only a Table instances' do
449
+ @ids.each do |id|
450
+ finded = Twimock::Database::Table.where(id: id)
451
+ expect(finded).to be_kind_of Array
452
+ expect(finded.count).to eq 1
453
+ expect(finded.first).to be_kind_of Twimock::Database::Table
454
+ expect(finded.first.id).to eq id
455
+ end
456
+ end
457
+ end
458
+ end
459
+
460
+ describe '.method_missing' do
461
+ context 'method name does not include find_by and find_all_by' do
462
+ subject { lambda { Twimock::Database::Table.find_hoge } }
463
+ it { is_expected.to raise_error NoMethodError }
464
+ end
465
+
466
+ context 'method name does not inlcude column name' do
467
+ context 'without argument' do
468
+ subject { lambda { Twimock::Database::Table.find_by_hoge } }
469
+ it { is_expected.to raise_error NoMethodError }
470
+ end
471
+
472
+ context 'with argument' do
473
+ subject { lambda { Twimock::Database::Table.find_by_hoge("hoge") } }
474
+ it { is_expected.to raise_error NoMethodError }
475
+ end
476
+ end
477
+
478
+ context 'method name inlcudes by_column_name' do
479
+ context 'without argument' do
480
+ subject { lambda { Twimock::Database::Table.find_by_id } }
481
+ it { is_expected.to raise_error ArgumentError }
482
+ end
483
+
484
+ describe '.find_by_id' do
485
+ context 'with nil' do
486
+ subject { Twimock::Database::Table.find_by_id(nil) }
487
+ it { is_expected.to be_nil }
488
+ end
489
+
490
+ context 'with not id' do
491
+ subject { Twimock::Database::Table.find_by_id("hoge") }
492
+ it { is_expected.to be_nil }
493
+ end
494
+
495
+ context 'with id' do
496
+ context 'when record does not exist' do
497
+ subject { Twimock::Database::Table.find_by_id(1) }
498
+ it { is_expected.to be_nil }
499
+ end
500
+
501
+ context 'when record exists' do
502
+ it 'should be Table instance' do
503
+ created = Twimock::Database::Table.new({text: "test", number: 1})
504
+ created.save!
505
+ finded = Twimock::Database::Table.find_by_id(created.id)
506
+ expect(finded).to be_kind_of Twimock::Database::Table
507
+ expect(finded.id).to eq created.id
508
+ finded.instance_variables.each do |key|
509
+ expect(finded.instance_variable_get(key)).to eq created.instance_variable_get(key)
510
+ end
511
+ end
512
+ end
513
+ end
514
+ end
515
+
516
+ describe '.find_by_created_at' do
517
+ context 'with not created_at' do
518
+ subject { Twimock::Database::Table.find_by_created_at("hoge") }
519
+ it { is_expected.to be_nil }
520
+ end
521
+
522
+ context 'with created_at' do
523
+ context 'when record does not exist' do
524
+ subject { Twimock::Database::Table.find_by_created_at(Time.now) }
525
+ it { is_expected.to be_nil }
526
+ end
527
+
528
+ context 'when record exists' do
529
+ it 'should be Table instance' do
530
+ created = Twimock::Database::Table.new({text: "test", number: 1})
531
+ created.save!
532
+ finded = Twimock::Database::Table.find_by_created_at(created.created_at)
533
+ expect(finded).to be_kind_of Twimock::Database::Table
534
+ expect(finded.id).to eq created.id
535
+ finded.instance_variables.each do |key|
536
+ expect(finded.instance_variable_get(key)).to eq created.instance_variable_get(key)
537
+ end
538
+ end
539
+ end
540
+ end
541
+ end
542
+ end
543
+
544
+ context 'method name includes find_all_by_column_name' do
545
+ context 'without argument' do
546
+ subject { lambda { Twimock::Database::Table.find_all_by_id } }
547
+ it { is_expected.to raise_error ArgumentError }
548
+ end
549
+
550
+ describe '.find_all_by_id' do
551
+ context 'with nil' do
552
+ subject { Twimock::Database::Table.find_all_by_id(nil) }
553
+ it { is_expected.to be_empty }
554
+ end
555
+
556
+ context 'with not id' do
557
+ subject { Twimock::Database::Table.find_all_by_id("hoge") }
558
+ it { is_expected.to be_empty }
559
+ end
560
+
561
+ context 'with id' do
562
+ context 'when record does not exist' do
563
+ subject { Twimock::Database::Table.find_all_by_id(1) }
564
+ it { is_expected.to be_empty }
565
+ end
566
+
567
+ context 'when record exists' do
568
+ it 'should be array and should have only one Table instances' do
569
+ created = Twimock::Database::Table.new({text: "test", number: 1})
570
+ created.save!
571
+ tables = Twimock::Database::Table.find_all_by_id(created.id)
572
+ expect(tables).to be_kind_of Array
573
+ expect(tables.count).to eq 1
574
+ tables.each do |finded|
575
+ finded.instance_variables.each do |key|
576
+ expect(finded.instance_variable_get(key)).to eq created.instance_variable_get(key)
577
+ end
578
+ end
579
+ end
580
+ end
581
+ end
582
+ end
583
+
584
+ describe '.find_all_by_created_at' do
585
+ context 'with not created_at' do
586
+ subject { Twimock::Database::Table.find_all_by_created_at("hoge") }
587
+ it { is_expected.to be_empty }
588
+ end
589
+
590
+ context 'with created_at' do
591
+ context 'when record does not exist' do
592
+ subject { Twimock::Database::Table.find_all_by_created_at(Time.now) }
593
+ it { is_expected.to be_empty }
594
+ end
595
+
596
+ context 'when record exists' do
597
+ it 'should be Table instance' do
598
+ created = Twimock::Database::Table.new({text: "test", number: 1})
599
+ created.save!
600
+ created_at = created.created_at
601
+ updated = Twimock::Database::Table.new({text: "test", number: 1})
602
+ updated.save!
603
+ updated.created_at = created_at
604
+ updated.save!
605
+
606
+ tables = Twimock::Database::Table.find_all_by_created_at(created_at)
607
+ expect(tables).to be_kind_of Array
608
+ expect(tables.count).to eq 2
609
+ tables.each do |finded|
610
+ expect(finded).to be_kind_of Twimock::Database::Table
611
+ expect(finded.created_at).to eq created_at
612
+ end
613
+ end
614
+ end
615
+ end
616
+ end
617
+ end
618
+ end
619
+
620
+ describe '#method_missing' do
621
+ before do
622
+ @table = Twimock::Database::Table.new({text: "test", number: 1})
623
+ @table.save!
624
+ end
625
+
626
+ context 'when method is getter' do
627
+ describe '#id' do
628
+ subject { @table.id }
629
+ it { is_expected.to be_kind_of Integer }
630
+ end
631
+
632
+ describe '#identifier' do
633
+ subject { @table.identifier }
634
+ it { is_expected.to eq @table.id }
635
+ end
636
+ end
637
+
638
+ context 'when method is setter' do
639
+ describe '#id=' do
640
+ before { @id = 1 }
641
+
642
+ it 'should set attribute to id' do
643
+ expect(@table.id).to be_kind_of Integer
644
+ @table.id = @id
645
+ expect(@table.id).to eq @id
646
+ end
647
+ end
648
+
649
+ describe '#identifier=' do
650
+ before { @id = 1 }
651
+
652
+ it 'should set attribute to id' do
653
+ expect(@table.identifier).to be_kind_of Integer
654
+ @table.identifier = @id
655
+ expect(@table.id).to eq @id
656
+ expect(@table.identifier).to eq @table.id
657
+ end
658
+ end
659
+ end
660
+ end
661
+
662
+ describe '.table_info' do
663
+ subject { Twimock::Database::Table.table_info }
664
+ it { is_expected.to be_kind_of Hashie::Mash }
665
+
666
+ it 'has keys that is id and created_at' do
667
+ table_info = Twimock::Database::Table.table_info
668
+ table_info.each_keys do |key|
669
+ expect(key.to_sym).to include column_names
670
+ end
671
+ end
672
+
673
+ context 'then keys' do
674
+ before { @table_info = Twimock::Database::Table.table_info }
675
+
676
+ describe '#id' do
677
+ subject { @table_info.id }
678
+ it { is_expected.to be_kind_of Hashie::Mash }
679
+
680
+ it 'should have column_info' do
681
+ expect(@table_info.id.cid).to eq 0
682
+ expect(@table_info.id.name).to eq :id
683
+ expect(@table_info.id.type).to eq "INTEGER"
684
+ expect(@table_info.id.notnull).to eq false
685
+ expect(@table_info.id.dflt_value).to be_nil
686
+ expect(@table_info.id.pk).to eq true
687
+ end
688
+ end
689
+
690
+ describe '#text' do
691
+ subject { @table_info.created_at }
692
+ it { is_expected.to be_kind_of Hashie::Mash }
693
+
694
+ it 'should have column_info' do
695
+ expect(@table_info.text.cid).to eq 1
696
+ expect(@table_info.text.name).to eq :text
697
+ expect(@table_info.text.type).to eq "TEXT"
698
+ expect(@table_info.text.notnull).to eq true
699
+ expect(@table_info.text.dflt_value).to be_nil
700
+ expect(@table_info.text.pk).to eq false
701
+ end
702
+ end
703
+
704
+ describe '#active' do
705
+ subject { @table_info.active }
706
+ it { is_expected.to be_kind_of Hashie::Mash }
707
+
708
+ it 'should have column_info' do
709
+ expect(@table_info.active.cid).to eq 2
710
+ expect(@table_info.active.name).to eq :active
711
+ expect(@table_info.active.type).to eq "BOOLEAN"
712
+ expect(@table_info.active.notnull).to eq false
713
+ expect(@table_info.active.dflt_value).to be_nil
714
+ expect(@table_info.active.pk).to eq false
715
+ end
716
+ end
717
+
718
+ describe '#number' do
719
+ subject { @table_info.number }
720
+ it { is_expected.to be_kind_of Hashie::Mash }
721
+
722
+ it 'should have column_info' do
723
+ expect(@table_info.number.cid).to eq 3
724
+ expect(@table_info.number.name).to eq :number
725
+ expect(@table_info.number.type).to eq "INTEGER"
726
+ expect(@table_info.number.notnull).to eq true
727
+ expect(@table_info.number.dflt_value).to be_nil
728
+ expect(@table_info.number.pk).to eq false
729
+ end
730
+ end
731
+
732
+ describe '#created_at' do
733
+ subject { @table_info.created_at }
734
+ it { is_expected.to be_kind_of Hashie::Mash }
735
+
736
+ it 'should have column_info' do
737
+ expect(@table_info.created_at.cid).to eq 4
738
+ expect(@table_info.created_at.name).to eq :created_at
739
+ expect(@table_info.created_at.type).to eq "DATETIME"
740
+ expect(@table_info.created_at.notnull).to eq true
741
+ expect(@table_info.created_at.dflt_value).to be_nil
742
+ expect(@table_info.created_at.pk).to eq false
743
+ end
744
+ end
745
+ end
746
+ end
747
+
748
+ describe '.column_type' do
749
+ context 'without argument' do
750
+ subject { lambda { Twimock::Database::Table.column_type } }
751
+ it { is_expected.to raise_error ArgumentError }
752
+ end
753
+
754
+ context 'with not column name' do
755
+ subject { Twimock::Database::Table.column_type(:hoge) }
756
+ it { is_expected.to be_nil }
757
+ end
758
+
759
+ context 'with id' do
760
+ subject { Twimock::Database::Table.column_type(:id) }
761
+ it { is_expected.to eq "INTEGER" }
762
+ end
763
+
764
+ context 'with created_at' do
765
+ subject { Twimock::Database::Table.column_type(:created_at) }
766
+ it { is_expected.to eq "DATETIME" }
767
+ end
768
+ end
769
+ end