activefacts-api 1.8.1 → 1.8.3

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.
@@ -1,102 +0,0 @@
1
- #
2
- # ActiveFacts tests: Entity classes in the Runtime API
3
- # Copyright (c) 2008 Clifford Heath. Read the LICENSE file.
4
- #
5
-
6
- describe "Entity Type class definitions" do
7
- before :each do
8
- Object.send :remove_const, :Mod if Object.const_defined?("Mod")
9
- module Mod
10
- class Name < String
11
- value_type
12
- end
13
- class LegalEntity
14
- end
15
- class Person < LegalEntity
16
- identified_by :name
17
- one_to_one :name, :class => Name
18
- end
19
- end
20
- end
21
-
22
- it "should respond_to verbalise" do
23
- Mod::Person.respond_to?(:verbalise).should be true
24
- end
25
-
26
- it "should not pollute the superclass" do
27
- Mod::LegalEntity.respond_to?(:verbalise).should_not be true
28
- Class.respond_to?(:verbalise).should_not be true
29
- end
30
-
31
- it "should return a string from verbalise" do
32
- v = Mod::Person.verbalise
33
- v.should_not be_nil
34
- v.should_not =~ /REVISIT/
35
- end
36
-
37
- it "should respond_to vocabulary" do
38
- Mod::Person.respond_to?(:vocabulary).should be true
39
- end
40
-
41
- it "should return the parent module as the vocabulary" do
42
- vocabulary = Mod::Person.vocabulary
43
- vocabulary.should == Mod
44
- end
45
-
46
- it "should return a vocabulary that knows about this object_type" do
47
- vocabulary = Mod::Person.vocabulary
48
- vocabulary.respond_to?(:object_type).should be true
49
- vocabulary.object_type.has_key?("Person").should be_truthy
50
- end
51
-
52
- it "should respond to all_role()" do
53
- Mod::Person.respond_to?(:all_role).should be true
54
- end
55
-
56
- it "should contain only the added role definition" do
57
- Mod::Person.all_role.size.should == 1
58
- end
59
-
60
- it "should return the role definition" do
61
- # Check the role definition may be accessed by passing an index:
62
- Mod::Person.all_role(0).should be_nil
63
-
64
- role = Mod::Person.all_role(:name)
65
- role.should_not be_nil
66
-
67
- role = Mod::Person.all_role("name")
68
- role.should_not be_nil
69
-
70
- # Check the role definition may be accessed by indexing the returned hash:
71
- role = Mod::Person.all_role[:name]
72
- role.should_not be_nil
73
-
74
- # Check the role definition array by .include?
75
- Mod::Person.all_role.include?(:name).should be true
76
- end
77
-
78
- it "should fail on a ValueType" do
79
- lambda{
80
- class SomeClass < String
81
- identified_by :foo
82
- end
83
- }.should raise_error(ActiveFacts::API::InvalidEntityException)
84
- end
85
-
86
- it "should return the identifying roles" do
87
- Mod::Person.identifying_role_names.should == [:name]
88
- end
89
-
90
- it "should prevent a role name from matching a object_type that exists unless that object_type is the counterpart" do
91
- proc do
92
- module Mod
93
- class LegalEntity
94
- end
95
- class Bad
96
- identified_by :name
97
- has_one :name, :class => LegalEntity
98
- end
99
- end
100
- end.should raise_error(ActiveFacts::API::CrossVocabularyRoleException)
101
- end
102
- end
@@ -1,82 +0,0 @@
1
- require 'activefacts/api'
2
-
3
- module TestMultiPartIdentifierModule
4
- class ParentId < AutoCounter
5
- value_type
6
- end
7
-
8
- class Parent
9
- identified_by :parent_id
10
- one_to_one :parent_id
11
- end
12
-
13
- class Position < Int
14
- value_type
15
- end
16
-
17
- class Child
18
- identified_by :parent, :position
19
- has_one :parent
20
- has_one :position
21
- end
22
- end
23
-
24
- describe "Multi-part identifiers" do
25
- before :each do
26
- @c = ActiveFacts::API::Constellation.new(TestMultiPartIdentifierModule)
27
- @p = @c.Parent(:new)
28
- @c0 = @c.Child(@p, 0)
29
- @c2 = @c.Child(@p, 2)
30
- @c1 = @c.Child(@p, 1)
31
- end
32
-
33
- it "should allow children to be found in the instance index" do
34
- pv = @p.identifying_role_values
35
- @c.Child[[pv, 0]].should == @c0
36
- @c.Child[[pv, 1]].should == @c1
37
- @c.Child[[pv, 2]].should == @c2
38
- end
39
-
40
- it "should sort child keys in the instance index" do
41
- pending "Key sorting is not supported on this index" unless @c.Child.sort
42
- @c.Child.keys.should == [[[@p.parent_id], 0], [[@p.parent_id], 1], [[@p.parent_id], 2]]
43
- @c.Child.map{|k, c| c.position}.should == [@c0.position, @c1.position, @c2.position]
44
- end
45
-
46
- it "should index children in the parent's RoleValues" do
47
- @p.all_child.size.should == 3
48
- end
49
-
50
- it "should allow children to be found in the instance index by the whole key" do
51
- @c.Child[[[@p.parent_id], 0]].should == @c0
52
- @c.Child[[[@p.parent_id], 1]].should == @c1
53
- @c.Child[[[@p.parent_id], 2]].should == @c2
54
- end
55
-
56
- it "should sort children in the parent's RoleValues" do
57
- pending "Key sorting is not supported in this version" if @p.all_child.instance_variable_get("@a").kind_of? Array
58
- @p.all_child.to_a[0].should == @c0
59
- @p.all_child.to_a[1].should == @c1
60
- @p.all_child.to_a[2].should == @c2
61
- end
62
-
63
- it "should allow children to be found in an identifying partner's RoleValues by the residual key" do
64
- @p.all_child[0].should == @c0
65
- @p.all_child[1].should == @c1
66
- @p.all_child[2].should == @c2
67
- end
68
-
69
- it "should use the correct residual key for each child in an identifying partner's RoleValues" do
70
- if @p.all_child.instance_variable_get("@a").kind_of? Array
71
- pending "Key sorting is not supported in this version"
72
- end
73
-
74
- @p.all_child.keys[0].should == [0]
75
- @p.all_child.keys[1].should == [1]
76
- @p.all_child.keys[2].should == [2]
77
-
78
- # @p.all_child.keys[0].should == [[@p.parent_id], 0]
79
- # @p.all_child.keys[1].should == [[@p.parent_id], 1]
80
- # @p.all_child.keys[2].should == [[@p.parent_id], 2]
81
- end
82
- end
@@ -1,87 +0,0 @@
1
- #
2
- # ActiveFacts tests: Value instances in the Runtime API
3
- # Copyright (c) 2008 Clifford Heath. Read the LICENSE file.
4
- #
5
-
6
- describe "AutoCounter Value Type instances" do
7
- before :each do
8
- Object.send :remove_const, :Mod if Object.const_defined?("Mod")
9
- module Mod
10
- class ThingId < AutoCounter
11
- value_type
12
- end
13
- class Thing
14
- identified_by :thing_id
15
- one_to_one :thing_id
16
- end
17
- class Ordinal < Int
18
- value_type
19
- end
20
- class ThingFacet
21
- identified_by :thing, :ordinal
22
- has_one :thing
23
- has_one :ordinal
24
- end
25
- end
26
- @constellation = ActiveFacts::API::Constellation.new(Mod)
27
- @thing = @constellation.Thing(:new)
28
- @thing_id = @constellation.ThingId(:new)
29
- end
30
-
31
- it "should respond to verbalise" do
32
- @thing_id.respond_to?(:verbalise).should be true
33
- end
34
-
35
- it "should verbalise correctly" do
36
- @thing_id.verbalise.should =~ /ThingId 'new_[0-9]+'/
37
- end
38
-
39
- it "should respond to constellation" do
40
- @thing_id.respond_to?(:constellation).should be true
41
- end
42
-
43
- it "should respond to its roles" do
44
- @thing_id.respond_to?(:thing).should be true
45
- end
46
-
47
- it "should allow prevent invalid role assignment" do
48
- lambda {
49
- @thing.thing_id = "foo"
50
- }.should raise_error(ArgumentError)
51
- end
52
-
53
- it "should not allow its value to be re-assigned" do
54
- lambda {
55
- @thing.thing_id.assign(3)
56
- }.should_not raise_error
57
- lambda {
58
- @thing.thing_id.assign(4)
59
- #@thing.thing_id.assign(@thing_id)
60
- }.should raise_error(ArgumentError)
61
- end
62
-
63
- it "should allow an existing counter to be re-used" do
64
- @new_thing = @constellation.Thing(@thing_id)
65
- @new_thing.thing_id.to_s.should == @thing_id.to_s
66
- end
67
-
68
- it "should return the ValueType in response to .class()" do
69
- @thing_id.class.vocabulary.should == Mod
70
- end
71
-
72
- it "should not allow a counter to be cloned" do
73
- lambda {
74
- @thing_id.clone
75
- }.should raise_error(RuntimeError)
76
- end
77
-
78
- it "should allow an existing counter-identified object to be re-used" do
79
- thing = @constellation.Thing(:new)
80
- facets = []
81
- facets << @constellation.ThingFacet(thing, 0)
82
- facets << @constellation.ThingFacet(thing, 1)
83
- facets[0].thing.should be_eql(facets[1].thing)
84
- facets[0].thing.thing_id.should be_eql(facets[1].thing.thing_id)
85
- end
86
-
87
- end
@@ -1,38 +0,0 @@
1
- #
2
- # ActiveFacts tests: Value instances in the Runtime API
3
- # Copyright (c) 2008 Clifford Heath. Read the LICENSE file.
4
- #
5
- require 'activefacts/api'
6
-
7
- describe Date do
8
- it "should construct with no arguments" do
9
- proc {
10
- @d = Date.new()
11
- }.should_not raise_error
12
- @d.year.should == -4712
13
- end
14
-
15
- it "should construct with a nil argument" do
16
- proc {
17
- @d = Date.new_instance(nil, nil)
18
- }.should_not raise_error
19
- @d.year.should == -4712
20
- end
21
-
22
- it "should construct with a full arguments" do
23
- proc {
24
- @d = Date.civil(2012, 10, 31)
25
- }.should_not raise_error
26
- @d.to_s.should == "2012-10-31"
27
- end
28
-
29
- =begin
30
- it "should be encodable in JSON" do
31
- proc {
32
- @d = Date.new(2012, 10, 31)
33
- @d.to_json.should == "REVISIT"
34
- }.should_not raise_error
35
- end
36
- =end
37
-
38
- end
@@ -1,71 +0,0 @@
1
- #
2
- # ActiveFacts tests: Value instances in the Runtime API
3
- # Copyright (c) 2008 Clifford Heath. Read the LICENSE file.
4
- #
5
-
6
- describe "Guid Value Type instances" do
7
- before :each do
8
- Object.send :remove_const, :Mod if Object.const_defined?("Mod")
9
- module Mod
10
- class ThingId < Guid
11
- value_type
12
- end
13
- class Thing
14
- identified_by :thing_id
15
- one_to_one :thing_id
16
- end
17
- class Ordinal < Int
18
- value_type
19
- end
20
- class ThingFacet
21
- identified_by :thing, :ordinal
22
- has_one :thing
23
- has_one :ordinal
24
- end
25
- end
26
- @constellation = ActiveFacts::API::Constellation.new(Mod)
27
- @thing = @constellation.Thing(:new)
28
- @thing_id = @constellation.ThingId(:new)
29
- end
30
-
31
- it "should respond to verbalise" do
32
- @thing_id.respond_to?(:verbalise).should be true
33
- end
34
-
35
- it "should verbalise correctly" do
36
- @thing_id.verbalise.should =~ /ThingId '[-0-9a-f]{36}'/i
37
- end
38
-
39
- it "should respond to constellation" do
40
- @thing_id.respond_to?(:constellation).should be true
41
- end
42
-
43
- it "should respond to its roles" do
44
- @thing_id.respond_to?(:thing).should be true
45
- end
46
-
47
- it "should allow prevent invalid role assignment" do
48
- lambda {
49
- @thing.thing_id = "foo"
50
- }.should raise_error(ArgumentError)
51
- end
52
-
53
- it "should allow an existing guid to be re-used" do
54
- @new_thing = @constellation.Thing(@thing_id)
55
- @new_thing.thing_id.should == @thing_id
56
- end
57
-
58
- it "should return the ValueType in response to .class()" do
59
- @thing_id.class.vocabulary.should == Mod
60
- end
61
-
62
- it "should allow an existing guid-identified object to be re-used" do
63
- thing = @constellation.Thing(:new)
64
- facets = []
65
- facets << @constellation.ThingFacet(thing, 0)
66
- facets << @constellation.ThingFacet(thing, 1)
67
- facets[0].thing.should be_eql(facets[1].thing)
68
- facets[0].thing.thing_id.should be_eql(facets[1].thing.thing_id)
69
- end
70
-
71
- end
@@ -1,63 +0,0 @@
1
- #
2
- # ActiveFacts tests: Value instances in the Runtime API
3
- # Copyright (c) 2008 Clifford Heath. Read the LICENSE file.
4
- #
5
-
6
- describe Int do
7
- before :each do
8
- @i = Int.new(1)
9
- end
10
-
11
- it "should be encodable in JSON" do
12
- @i.to_json.should == "1"
13
- end
14
-
15
- it "should behave like an Integer" do
16
- 1.should == @i
17
- @i.should == 1
18
- @i.to_s.should == "1"
19
- @i.should eql 1
20
- @i.should be_an Integer
21
- end
22
-
23
- it "should also know that it's a delegator" do
24
- @i.is_a?(SimpleDelegator).should be true
25
- @i.is_a?(Int).should be true
26
- end
27
- end
28
-
29
- describe Real do
30
- before :each do
31
- @r = Real.new(1.0)
32
- end
33
-
34
- it "should be encodable in JSON" do
35
- @r.to_json.should == "1.0"
36
- end
37
-
38
- it "should behave like a Float" do
39
- 1.0.should == @r
40
- @r.should == 1.0
41
- @r.to_s.should == "1.0"
42
- @r.eql?(1.0).should be true
43
- @r.is_a?(Float).should be true
44
- end
45
-
46
- it "should also know that it's a delegator" do
47
- @r.is_a?(SimpleDelegator).should be true
48
- @r.is_a?(Real).should be true
49
- end
50
- end
51
-
52
- describe Decimal do
53
- it "should still detect Decimal as the main class" do
54
- bd = Decimal.new("98765432109876543.210")
55
- bd.to_s("F").should == "98765432109876543.21"
56
- bd.to_s("E").should == "0.9876543210987654321E17"
57
- bd.to_s("3E").should =~ /0.987 654 321 098 765 432 1.*E17/
58
- bd.to_s(3).should =~ /0.987 654 321 098 765 432 1.*E17/
59
- bd.to_s("3F").should == "987 654 321 098 765 43.21"
60
- bd.should be_a Decimal
61
- bd.should be_a BigDecimal
62
- end
63
- end