vedeu 0.0.30 → 0.0.31

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.
Files changed (69) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +4 -4
  3. data/lib/vedeu/configuration.rb +2 -2
  4. data/lib/vedeu/launcher.rb +2 -2
  5. data/lib/vedeu/models/command.rb +1 -1
  6. data/lib/vedeu/models/interface.rb +4 -0
  7. data/lib/vedeu/output/interface_renderer.rb +1 -1
  8. data/lib/vedeu/output/template.rb +23 -0
  9. data/lib/vedeu/output/text_adaptor.rb +1 -1
  10. data/lib/vedeu/process/process.rb +5 -1
  11. data/lib/vedeu/repository/command_repository.rb +3 -5
  12. data/lib/vedeu/repository/event_repository.rb +27 -0
  13. data/lib/vedeu/repository/interface_repository.rb +8 -6
  14. data/lib/vedeu/repository/storage.rb +2 -0
  15. data/lib/vedeu/support/esc.rb +2 -1
  16. data/lib/vedeu/support/geometry.rb +11 -23
  17. data/lib/vedeu/support/parser.rb +1 -1
  18. data/lib/vedeu/support/queue.rb +3 -1
  19. data/lib/vedeu.rb +18 -1
  20. data/test/example_app/bin/app +9 -0
  21. data/test/example_app/lib/app.rb +63 -0
  22. data/test/lib/vedeu/application_test.rb +6 -36
  23. data/test/lib/vedeu/configuration_test.rb +5 -31
  24. data/test/lib/vedeu/input/input_test.rb +4 -16
  25. data/test/lib/vedeu/launcher_test.rb +6 -15
  26. data/test/lib/vedeu/models/background_test.rb +5 -21
  27. data/test/lib/vedeu/models/colour_test.rb +18 -49
  28. data/test/lib/vedeu/models/command_test.rb +19 -83
  29. data/test/lib/vedeu/models/composition_test.rb +78 -175
  30. data/test/lib/vedeu/models/foreground_test.rb +4 -21
  31. data/test/lib/vedeu/models/interface_collection_test.rb +13 -45
  32. data/test/lib/vedeu/models/interface_test.rb +71 -195
  33. data/test/lib/vedeu/models/line_collection_test.rb +13 -52
  34. data/test/lib/vedeu/models/line_test.rb +17 -61
  35. data/test/lib/vedeu/models/presentation_test.rb +6 -19
  36. data/test/lib/vedeu/models/stream_collection_test.rb +10 -42
  37. data/test/lib/vedeu/models/stream_test.rb +16 -54
  38. data/test/lib/vedeu/models/style_collection_test.rb +1 -10
  39. data/test/lib/vedeu/output/interface_renderer_test.rb +7 -38
  40. data/test/lib/vedeu/output/output_test.rb +1 -18
  41. data/test/lib/vedeu/output/template.rb +20 -0
  42. data/test/lib/vedeu/output/text_adaptor_test.rb +9 -46
  43. data/test/lib/vedeu/process/process_test.rb +36 -38
  44. data/test/lib/vedeu/repository/command_repository_test.rb +16 -45
  45. data/test/lib/vedeu/repository/interface_repository_test.rb +36 -74
  46. data/test/lib/vedeu/repository/repository_test.rb +9 -33
  47. data/test/lib/vedeu/repository/storage_test.rb +7 -42
  48. data/test/lib/vedeu/support/esc_test.rb +46 -130
  49. data/test/lib/vedeu/support/event_repository_test.rb +31 -0
  50. data/test/lib/vedeu/support/exit_test.rb +1 -9
  51. data/test/lib/vedeu/support/geometry_test.rb +81 -105
  52. data/test/lib/vedeu/support/parser_test.rb +10 -54
  53. data/test/lib/vedeu/support/parsing/hash_parser_test.rb +18 -33
  54. data/test/lib/vedeu/support/parsing/json_parser_test.rb +4 -23
  55. data/test/lib/vedeu/support/queue_test.rb +33 -57
  56. data/test/lib/vedeu/support/terminal_test.rb +21 -52
  57. data/test/lib/vedeu/support/translator_test.rb +16 -33
  58. data/test/lib/vedeu/support/wordwrap_test.rb +29 -46
  59. data/test/lib/vedeu_test.rb +3 -5
  60. data/test/support/template.erb +3 -0
  61. data/test/test_helper.rb +1 -12
  62. data/vedeu.gemspec +8 -10
  63. metadata +26 -38
  64. data/lib/vedeu/support/events.rb +0 -21
  65. data/lib/vedeu/version.rb +0 -3
  66. data/test/lib/vedeu/support/events_test.rb +0 -45
  67. data/test/lib/vedeu/version_test.rb +0 -12
  68. data/test/support/output_1.json +0 -9
  69. data/test/support/output_1.rb +0 -14
@@ -3,73 +3,35 @@ require_relative '../../../../lib/vedeu/models/stream'
3
3
 
4
4
  module Vedeu
5
5
  describe Stream do
6
- let(:described_class) { Stream }
7
- let(:described_instance) { described_class.new(attributes) }
8
- let(:attributes) {
9
- {
10
- style: 'normal',
11
- colour: { foreground: '#ff0000', background: '#000000' },
12
- text: 'Some text'
13
- }
14
- }
15
-
16
- describe '#initialize' do
17
- let(:subject) { described_instance }
18
-
19
- it 'returns a Stream instance' do
20
- subject.must_be_instance_of(Stream)
21
- end
6
+ it 'has a colour attribute' do
7
+ Stream.new({ colour: { foreground: '#ff0000', background: '#000000' } }).colour.must_be_instance_of(Colour)
22
8
  end
23
9
 
24
- describe '#colour' do
25
- let(:subject) { described_instance.colour }
26
-
27
- it 'has a colour attribute' do
28
- subject.must_be_instance_of(Colour)
29
- end
30
- end
31
-
32
- describe '#text' do
33
- let(:subject) { described_instance.text }
34
-
35
- it 'returns a String' do
36
- subject.must_be_instance_of(String)
37
- end
38
-
39
- it 'has a text attribute' do
40
- subject.must_equal('Some text')
41
- end
10
+ it 'has a text attribute' do
11
+ Stream.new({ text: 'Some text' }).text.must_equal('Some text')
42
12
  end
43
13
 
44
- describe '#style' do
45
- let(:subject) { described_instance.style }
46
-
47
- it 'has a style attribute' do
48
- subject.must_be_instance_of(String)
49
- end
14
+ it 'has a style attribute' do
15
+ Stream.new({ style: 'normal' }).style.must_equal("\e[24m\e[21m\e[27m")
50
16
  end
51
17
 
52
18
  describe '#to_s' do
53
- let(:subject) { described_instance.to_s }
54
-
55
19
  it 'returns a String' do
56
- subject.must_be_instance_of(String)
57
- end
58
-
59
- it 'returns a String' do
60
- subject.must_equal("\e[38;5;196m\e[48;5;16m\e[24m\e[21m\e[27mSome text")
20
+ Stream.new({
21
+ style: 'normal',
22
+ colour: { foreground: '#ff0000', background: '#000000' },
23
+ text: 'Some text'
24
+ }).to_s.must_equal("\e[38;5;196m\e[48;5;16m\e[24m\e[21m\e[27mSome text")
61
25
  end
62
26
  end
63
27
 
64
28
  describe '#to_json' do
65
- let(:subject) { described_instance.to_json }
66
-
67
- it 'returns a String' do
68
- subject.must_be_instance_of(String)
69
- end
70
-
71
29
  it 'returns a String' do
72
- subject.must_equal("{\"colour\":{\"foreground\":\"\\u001b[38;5;196m\",\"background\":\"\\u001b[48;5;16m\"},\"style\":\"\\u001b[24m\\u001b[21m\\u001b[27m\",\"text\":\"Some text\"}")
30
+ Stream.new({
31
+ style: 'normal',
32
+ colour: { foreground: '#ff0000', background: '#000000' },
33
+ text: 'Some text'
34
+ }).to_json.must_equal("{\"colour\":{\"foreground\":\"\\u001b[38;5;196m\",\"background\":\"\\u001b[48;5;16m\"},\"style\":\"\\u001b[24m\\u001b[21m\\u001b[27m\",\"text\":\"Some text\"}")
73
35
  end
74
36
  end
75
37
  end
@@ -4,18 +4,9 @@ require_relative '../../../../lib/vedeu/models/stream'
4
4
 
5
5
  module Vedeu
6
6
  describe StyleCollection do
7
- let(:described_class) { StyleCollection }
8
-
9
7
  describe '#coerce' do
10
- let(:subject) { Vedeu::Stream.new({ style: style }).style }
11
- let(:style) {}
12
-
13
- it 'returns a String' do
14
- subject.must_be_instance_of(String)
15
- end
16
-
17
8
  it 'returns an empty string' do
18
- subject.must_equal('')
9
+ Stream.new({ style: {} }).style.must_equal('')
19
10
  end
20
11
  end
21
12
  end
@@ -4,53 +4,22 @@ require_relative '../../../../lib/vedeu/models/interface'
4
4
 
5
5
  module Vedeu
6
6
  describe InterfaceRenderer do
7
- let(:described_class) { InterfaceRenderer }
8
- let(:described_instance) { described_class.new(interface) }
9
- let(:interface) { Interface.new(attributes) }
10
- let(:attributes) { { name: 'dummy', width: 20, height: 2 } }
11
-
12
- describe '#initialize' do
13
- let(:subject) { described_instance }
14
-
15
- it 'returns an InterfaceRenderer instance' do
16
- subject.must_be_instance_of(InterfaceRenderer)
17
- end
18
-
19
- it 'sets an instance variable' do
20
- subject.instance_variable_get("@interface").must_equal(interface)
21
- end
22
- end
23
-
24
7
  describe '.clear' do
25
- let(:subject) { described_class.clear(interface) }
26
-
27
- it 'returns a String' do
28
- subject.must_be_instance_of(String)
29
- end
30
-
31
8
  it 'returns the escape sequence to clear the whole interface' do
32
- subject.must_equal("\e[1;1H \e[1;1H\e[2;1H \e[2;1H")
9
+ interface = Interface.new({ name: 'dummy', width: 20, height: 2 })
10
+ InterfaceRenderer.clear(interface).must_equal("\e[1;1H \e[1;1H\e[2;1H \e[2;1H")
33
11
  end
34
12
 
35
- context 'when the interface has colour attributes' do
36
- let(:attributes) { { name: 'dummy', width: 20, height: 2, colour: { foreground: '#00ff00', background: '#ffff00' } } }
37
-
38
- it 'returns the escape sequence to clear the whole interface' do
39
- subject.must_equal("\e[38;5;46m\e[48;5;226m\e[1;1H \e[1;1H\e[2;1H \e[2;1H")
40
- end
13
+ it 'returns the escape sequence to clear the whole interface with specified colours' do
14
+ interface = Interface.new({ name: 'dummy', width: 20, height: 2, colour: { foreground: '#00ff00', background: '#ffff00' } })
15
+ InterfaceRenderer.clear(interface).must_equal("\e[38;5;46m\e[48;5;226m\e[1;1H \e[1;1H\e[2;1H \e[2;1H")
41
16
  end
42
17
  end
43
18
 
44
19
  describe '.render' do
45
- let(:subject) { described_class.render(interface) }
46
- let(:attributes) { { name: 'dummy', width: 20, height: 2, lines: "Some text..." } }
47
-
48
- it 'returns a String' do
49
- subject.must_be_instance_of(String)
50
- end
51
-
52
20
  it 'returns the content for the interface' do
53
- subject.must_equal("\e[1;1HSome text...")
21
+ interface = Interface.new({ name: 'dummy', width: 20, height: 2, lines: 'InterfaceRenderer.render' })
22
+ InterfaceRenderer.render(interface).must_equal("\e[1;1HInterfaceRenderer.render")
54
23
  end
55
24
  end
56
25
  end
@@ -3,26 +3,9 @@ require_relative '../../../../lib/vedeu/output/output'
3
3
 
4
4
  module Vedeu
5
5
  describe Output do
6
- let(:described_module) { Output }
7
- let(:output) {}
8
-
9
- before do
10
- InterfaceRepository.create({
11
- name: 'dummy',
12
- width: 15,
13
- height: 2,
14
- cursor: true
15
- })
16
- Terminal.stubs(:output).returns(output)
17
- end
18
-
19
- after { InterfaceRepository.reset }
20
-
21
6
  describe '.render' do
22
- let(:subject) { described_module.render }
23
-
24
7
  it 'returns an Array' do
25
- subject.must_be_instance_of(Array)
8
+ Output.render.must_be_instance_of(Array)
26
9
  end
27
10
  end
28
11
  end
@@ -0,0 +1,20 @@
1
+ require_relative '../../../test_helper'
2
+
3
+ module Vedeu
4
+ describe Template do
5
+ describe '#parse' do
6
+ object = OpenStruct.new(value: 'Hello from variable!')
7
+
8
+ it 'parses the template when the template file was found' do
9
+ path = '/../../../test/support/template.erb'
10
+ Template.new(object, path).parse.must_match(/This is the test template/)
11
+ Template.new(object, path).parse.must_match(/Hello from variable!/)
12
+ end
13
+
14
+ it 'raises an exception when the template file cannot be found' do
15
+ path = '/some/wrong/path/template.erb'
16
+ proc { Template.new(object, path).parse }.must_raise(Errno::ENOENT)
17
+ end
18
+ end
19
+ end
20
+ end
@@ -3,57 +3,20 @@ require_relative '../../../../lib/vedeu/output/text_adaptor'
3
3
 
4
4
  module Vedeu
5
5
  describe TextAdaptor do
6
- let(:described_class) { TextAdaptor }
7
- let(:text) { '' }
8
-
9
- describe '#initialize' do
10
- let(:subject) { described_class.new(text) }
11
-
12
- it 'returns an TextAdaptor instance' do
13
- subject.must_be_instance_of(TextAdaptor)
14
- end
15
-
16
- it 'sets an instance variable' do
17
- subject.instance_variable_get('@text').must_equal(text)
18
- end
19
- end
20
-
21
6
  describe '.adapt' do
22
- let(:subject) { described_class.adapt(text) }
23
-
24
- it 'returns an Array' do
25
- subject.must_be_instance_of(Array)
7
+ it 'returns an empty collection when processing an empty string' do
8
+ TextAdaptor.adapt('').must_be_empty
26
9
  end
27
10
 
28
- context 'when processing an empty string' do
29
- let(:text) { '' }
30
-
31
- it 'returns an empty collection' do
32
- subject.must_be_empty
33
- end
11
+ it 'returns a single line' do
12
+ text = "This is a single line of text.\n"
13
+ TextAdaptor.adapt(text).size.must_equal(1)
34
14
  end
35
15
 
36
- context 'when processing a single line' do
37
- let(:text) { "This is a single line of text.\n" }
38
-
39
- it 'returns a collection of Line objects' do
40
- subject.first.must_be_instance_of(Line)
41
-
42
- subject.size.must_equal(1)
43
- end
44
- end
45
-
46
- context 'when processing multiple lines' do
47
- let(:text) {
48
- "Lorem ipsum dolor sit amet,\nConseactetur adipiscing.\n" \
49
- "Curabitur aliquet, turpis id dui.\n\nConditum elemum.\n"
50
- }
51
-
52
- it 'returns a collection of Line objects' do
53
- subject.first.must_be_instance_of(Line)
54
-
55
- subject.size.must_equal(5)
56
- end
16
+ it 'returns multiple lines' do
17
+ text = "Lorem ipm olor sit aet,\nConsctetur adipiscing.\n" \
18
+ "Curitur aiquet, trpis id dui.\n\nCondum elemum.\n"
19
+ TextAdaptor.adapt(text).size.must_equal(5)
57
20
  end
58
21
  end
59
22
  end
@@ -1,71 +1,69 @@
1
1
  require_relative '../../../test_helper'
2
2
  require_relative '../../../../lib/vedeu/process/process'
3
- # require_relative '../../../../lib/vedeu/repository/interface_repository'
4
3
  require_relative '../../../support/dummy_command'
5
4
  require_relative '../../../../lib/vedeu/repository/command_repository'
6
5
 
7
6
  module Vedeu
8
7
  class QuitCommand
9
- def self.dispatch(*args)
8
+ def self.dispatch
10
9
  :stop
11
10
  end
12
11
  end
13
12
 
14
13
  class TestCommand
15
- def self.dispatch(*args)
16
- :test
14
+ def self.dispatch
15
+ {
16
+ 'Process#evaluate' => 'TestCommand.dispatch'
17
+ }
17
18
  end
18
19
  end
19
20
 
20
- describe Process do
21
- let(:described_class) { Process }
21
+ class NoResultCommand
22
+ def self.dispatch
23
+ end
24
+ end
22
25
 
26
+ describe Process do
23
27
  describe '.evaluate' do
24
- let(:subject) { described_class.evaluate }
28
+ it 'returns false when there is no input' do
29
+ Queue.reset
30
+ Process.evaluate.must_be_instance_of(FalseClass)
31
+ end
25
32
 
26
- before do
33
+ it 'raises an exception when the result is :stop' do
34
+ CommandRepository.reset
27
35
  CommandRepository.create({
28
- 'name' => 'quit',
36
+ name: 'quit',
29
37
  entity: QuitCommand,
30
38
  keypress: 'q'
31
39
  })
40
+ Queue.reset
41
+ Queue.enqueue('q')
42
+ proc { Process.evaluate }.must_raise(StopIteration)
43
+ end
44
+
45
+ it 'returns an Composition when there is a result' do
46
+ CommandRepository.reset
32
47
  CommandRepository.create({
33
48
  name: 'test',
34
49
  entity: TestCommand,
35
50
  keypress: 't'
36
51
  })
37
- Queue.stubs(:dequeue).returns(input)
38
- Parser.stubs(:parse).returns(Composition.new)
52
+ Queue.reset
53
+ Queue.enqueue('t')
54
+ Process.evaluate.must_be_instance_of(Composition)
39
55
  end
40
56
 
41
- after do
57
+ it 'returns a NilClass when there is no result' do
42
58
  CommandRepository.reset
43
- end
44
-
45
- context 'when there is no input' do
46
- let(:input) { '' }
47
-
48
- it 'returns a FalseClass' do
49
- subject.must_be_instance_of(FalseClass)
50
- end
51
- end
52
-
53
- context 'when there is input' do
54
- context 'and the result is :stop' do
55
- let(:input) { 'q' }
56
-
57
- it 'raises an exception' do
58
- proc { subject }.must_raise(StopIteration)
59
- end
60
- end
61
-
62
- context 'and there is a result' do
63
- let(:input) { 't' }
64
-
65
- it 'returns an Composition' do
66
- subject.must_be_instance_of(Composition)
67
- end
68
- end
59
+ CommandRepository.create({
60
+ name: 'no_result',
61
+ entity: NoResultCommand,
62
+ keypress: 'n'
63
+ })
64
+ Queue.reset
65
+ Queue.enqueue('n')
66
+ Process.evaluate.must_be_instance_of(NilClass)
69
67
  end
70
68
  end
71
69
  end
@@ -4,9 +4,6 @@ require_relative '../../../../lib/vedeu/repository/command_repository'
4
4
 
5
5
  module Vedeu
6
6
  describe CommandRepository do
7
- let(:described_class) { CommandRepository }
8
- let(:input) {}
9
-
10
7
  before do
11
8
  CommandRepository.create({
12
9
  name: 'apple',
@@ -21,66 +18,40 @@ module Vedeu
21
18
  keyword: 'banana'
22
19
  })
23
20
  end
24
-
25
21
  after { CommandRepository.reset }
26
22
 
27
23
  describe '.by_input' do
28
- let(:subject) { described_class.by_input(input) }
29
- let(:input) { 'b' }
30
-
31
- it 'returns the Command instance' do
32
- subject.must_be_instance_of(Command)
24
+ it 'returns the correct command when the command was found by keypress' do
25
+ CommandRepository.by_input('b').name.must_equal('banana')
26
+ CommandRepository.by_input('b').name.wont_equal('apple')
27
+ CommandRepository.by_input('b').keypress.must_equal('b')
33
28
  end
34
29
 
35
- context 'when the command was found by keypress' do
36
- it 'returns the correct command' do
37
- subject.name.must_equal('banana')
38
- end
39
-
40
- it 'returns the correct command' do
41
- subject.name.wont_equal('apple')
42
- end
43
-
44
- it 'returns the correct command' do
45
- subject.keypress.must_equal('b')
46
- end
30
+ it 'returns the correct command when the command was found by keyword' do
31
+ CommandRepository.by_input('apple').keypress.must_equal('a')
32
+ CommandRepository.by_input('apple').keypress.wont_equal('b')
33
+ CommandRepository.by_input('apple').name.wont_equal('banana')
47
34
  end
48
35
 
49
- context 'when the command was found by keyword' do
50
- let(:input) { 'apple' }
51
-
52
- it 'returns the correct command' do
53
- subject.keypress.must_equal('a')
54
- end
55
-
56
- it 'returns the correct command' do
57
- subject.keypress.wont_equal('b')
58
- end
36
+ it 'returns FalseClass when no command was found' do
37
+ CommandRepository.by_input('not_found').must_be_instance_of(FalseClass)
38
+ end
59
39
 
60
- it 'returns the correct command' do
61
- subject.name.wont_equal('banana')
62
- end
40
+ it 'returns FalseClass when there is no input' do
41
+ CommandRepository.by_input('').must_be_instance_of(FalseClass)
63
42
  end
64
43
  end
65
44
 
66
45
  describe '.create' do
67
- let(:subject) { described_class.create(attributes) }
68
- let(:attributes) { {} }
69
-
70
46
  it 'returns a Command' do
71
- subject.must_be_instance_of(Command)
47
+ skip
48
+ CommandRepository.create({}).must_be_instance_of(Command)
72
49
  end
73
50
  end
74
51
 
75
52
  describe '.entity' do
76
- let(:subject) { described_class.entity }
77
-
78
- it 'returns a Class instance' do
79
- subject.must_be_instance_of(Class)
80
- end
81
-
82
53
  it 'returns Command' do
83
- subject.must_equal(Command)
54
+ CommandRepository.entity.must_equal(Command)
84
55
  end
85
56
  end
86
57
  end
@@ -3,112 +3,74 @@ require_relative '../../../../lib/vedeu/repository/interface_repository'
3
3
 
4
4
  module Vedeu
5
5
  describe InterfaceRepository do
6
- let(:described_class) { InterfaceRepository }
7
-
8
- before do
9
- InterfaceRepository.create({
10
- name: 'dummy',
11
- width: 15,
12
- height: 2
13
- })
14
- end
15
- after { InterfaceRepository.reset }
16
-
17
6
  describe '.create' do
18
- let(:subject) { described_class.create(attributes) }
19
- let(:attributes) {
20
- {
7
+ it 'returns an Interface' do
8
+ InterfaceRepository.create({
21
9
  name: 'dummy',
22
10
  width: 15,
23
11
  height: 2
24
- }
25
- }
26
-
27
- it 'returns an Interface' do
28
- subject.must_be_instance_of(Interface)
12
+ }).must_be_instance_of(Interface)
29
13
  end
30
14
  end
31
15
 
32
16
  describe '.find' do
33
- let(:subject) { described_class.find(value) }
34
- let(:value) { 'dummy' }
35
-
36
- context 'when the interface exists' do
37
- it 'returns an Interface' do
38
- subject.must_be_instance_of(Interface)
39
- end
17
+ it 'returns an Interface when the interface exists' do
18
+ InterfaceRepository.create({
19
+ name: 'dummy',
20
+ width: 15,
21
+ height: 2
22
+ })
23
+ InterfaceRepository.find('dummy').must_be_instance_of(Interface)
40
24
  end
41
25
 
42
- context 'when the interface does not exist' do
43
- before { InterfaceRepository.reset }
44
-
45
- it 'raises an exception' do
46
- proc { subject }.must_raise(UndefinedInterface)
47
- end
26
+ it 'raises an exception when the interface does not exist' do
27
+ InterfaceRepository.reset
28
+ proc { InterfaceRepository.find('dummy') }
29
+ .must_raise(UndefinedInterface)
48
30
  end
49
31
  end
50
32
 
51
33
  describe '.update' do
52
- let(:subject) { described_class.update(value, attributes) }
53
- let(:value) { 'dummy' }
54
- let(:attributes) { { name: 'dumber' } }
55
-
56
34
  it 'returns an Interface' do
57
- subject.must_be_instance_of(Interface)
35
+ InterfaceRepository.update('dummy', { name: 'dumber' })
36
+ .must_be_instance_of(Interface)
58
37
  end
59
38
 
60
- context 'when the interface exists' do
61
- it 'updates and returns the existing interface' do
62
- subject.name.must_equal('dumber')
63
- end
39
+ it 'updates and returns the existing interface when the interface exists' do
40
+ InterfaceRepository.update('dummy', { name: 'dumber' }).name
41
+ .must_equal('dumber')
64
42
  end
65
43
 
66
- context 'when the interface does not exist' do
67
- before { InterfaceRepository.reset }
68
-
69
- it 'returns the created interface' do
70
- subject.name.must_equal('dumber')
71
- end
44
+ it 'returns a new interface when the interface does not exist' do
45
+ InterfaceRepository.reset
46
+ InterfaceRepository.update('dummy', { name: 'dumber' }).name
47
+ .must_equal('dumber')
72
48
  end
73
49
  end
74
50
 
75
51
  describe '.refresh' do
76
- let(:subject) { described_class.refresh }
77
-
78
- it 'returns an Array' do
79
- subject.must_be_instance_of(Array)
80
- end
81
- end
82
-
83
- describe '.by_layer' do
84
- let(:subject) { described_class.by_layer }
85
-
86
- before do
87
- InterfaceRepository.reset
88
- @case_a = InterfaceRepository.create({ name: 'a', width: 15, height: 2, z: 2 })
89
- @case_b = InterfaceRepository.create({ name: 'b', width: 15, height: 2, z: 1 })
90
- @case_c = InterfaceRepository.create({ name: 'c', width: 15, height: 2, z: 3 })
91
- end
92
- after { InterfaceRepository.reset }
93
-
94
52
  it 'returns an Array' do
95
- subject.must_be_instance_of(Array)
53
+ InterfaceRepository.refresh.must_be_instance_of(Array)
96
54
  end
97
55
 
98
56
  it 'returns the collection in order they should be drawn' do
99
- subject.must_equal([@case_b, @case_a, @case_c])
57
+ InterfaceRepository.reset
58
+ InterfaceRepository.create({
59
+ name: 'a', width: 15, height: 2, z: 2
60
+ }).enqueue("a")
61
+ InterfaceRepository.create({
62
+ name: 'b', width: 15, height: 2, z: 1
63
+ }).enqueue("b")
64
+ InterfaceRepository.create({
65
+ name: 'c', width: 15, height: 2, z: 3
66
+ }).enqueue("c")
67
+ InterfaceRepository.refresh.must_equal(['b', 'a', 'c'])
100
68
  end
101
69
  end
102
70
 
103
71
  describe '.entity' do
104
- let(:subject) { described_class.entity }
105
-
106
- it 'returns a Class instance' do
107
- subject.must_be_instance_of(Class)
108
- end
109
-
110
72
  it 'returns Interface' do
111
- subject.must_equal(Interface)
73
+ InterfaceRepository.entity.must_equal(Interface)
112
74
  end
113
75
  end
114
76
  end