source: subversion/sites/rails_port/test/test_helper.rb @ 15050

Last change on this file since 15050 was 14823, checked in by Shaun McDonald, 10 years ago

More changeset test improvements. Another fixture was required for one of the tests

File size: 5.5 KB
Line 
1ENV["RAILS_ENV"] = "test"
2require File.expand_path(File.dirname(__FILE__) + "/../config/environment")
3require 'test_help'
4load 'composite_primary_keys/fixtures.rb'
5
6class Test::Unit::TestCase
7  # Transactional fixtures accelerate your tests by wrapping each test method
8  # in a transaction that's rolled back on completion.  This ensures that the
9  # test database remains unchanged so your fixtures don't have to be reloaded
10  # between every test method.  Fewer database queries means faster tests.
11  #
12  # Read Mike Clark's excellent walkthrough at
13  #   http://clarkware.com/cgi/blosxom/2005/10/24#Rails10FastTesting
14  #
15  # Every Active Record database supports transactions except MyISAM tables
16  # in MySQL.  Turn off transactional fixtures in this case; however, if you
17  # don't care one way or the other, switching from MyISAM to InnoDB tables
18  # is recommended.
19  self.use_transactional_fixtures = false
20
21  # Instantiated fixtures are slow, but give you @david where otherwise you
22  # would need people(:david).  If you don't want to migrate your existing
23  # test cases which use the @david style and don't mind the speed hit (each
24  # instantiated fixtures translates to a database query per test method),
25  # then set this back to true.
26  self.use_instantiated_fixtures  = false
27
28
29  # Load standard fixtures needed to test API methods
30  def self.api_fixtures
31    #print "setting up the api_fixtures"
32    fixtures :users, :changesets, :changeset_tags
33
34    fixtures :current_nodes, :nodes
35    set_fixture_class :current_nodes => 'Node'
36    set_fixture_class :nodes => 'OldNode'
37
38    fixtures  :current_node_tags,:node_tags
39    set_fixture_class :current_node_tags => 'NodeTag'
40    set_fixture_class :node_tags => 'OldNodeTag'
41
42    fixtures :current_ways
43    set_fixture_class :current_ways => 'Way'
44
45    fixtures :current_way_nodes, :current_way_tags
46    set_fixture_class :current_way_nodes => 'WayNode'
47    set_fixture_class :current_way_tags => 'WayTag'
48
49    fixtures :ways
50    set_fixture_class :ways => 'OldWay'
51
52    fixtures :way_nodes, :way_tags
53    set_fixture_class :way_nodes => 'OldWayNode'
54    set_fixture_class :way_tags => 'OldWayTag'
55
56    fixtures :current_relations
57    set_fixture_class :current_relations => 'Relation'
58
59    fixtures :current_relation_members, :current_relation_tags
60    set_fixture_class :current_relation_members => 'RelationMember'
61    set_fixture_class :current_relation_tags => 'RelationTag'
62
63    fixtures :relations
64    set_fixture_class :relations => 'OldRelation'
65
66    fixtures :relation_members, :relation_tags
67    set_fixture_class :relation_members => 'OldRelationMember'
68    set_fixture_class :relation_tags => 'OldRelationTag'
69   
70    fixtures :gpx_files, :gps_points, :gpx_file_tags
71    set_fixture_class :gpx_files => 'Trace'
72    set_fixture_class :gps_points => 'Tracepoint'
73    set_fixture_class :gpx_file_tags => 'Tracetag'
74  end
75
76  ##
77  # takes a block which is executed in the context of a different
78  # ActionController instance. this is used so that code can call methods
79  # on the node controller whilst testing the old_node controller.
80  def with_controller(new_controller)
81    controller_save = @controller
82    begin
83      @controller = new_controller
84      yield
85    ensure
86      @controller = controller_save
87    end
88  end
89
90  ##
91  # for some reason assert_equal a, b fails when the ways are actually
92  # equal, so this method manually checks the fields...
93  def assert_ways_are_equal(a, b)
94    assert_not_nil a, "first way is not allowed to be nil"
95    assert_not_nil b, "second way #{a.id} is not allowed to be nil"
96    assert_equal a.id, b.id, "way IDs"
97    assert_equal a.changeset_id, b.changeset_id, "changeset ID on way #{a.id}"
98    assert_equal a.visible, b.visible, "visible on way #{a.id}, #{a.visible.inspect} != #{b.visible.inspect}"
99    assert_equal a.version, b.version, "version on way #{a.id}"
100    assert_equal a.tags, b.tags, "tags on way #{a.id}"
101    assert_equal a.nds, b.nds, "node references on way #{a.id}"
102  end
103
104  ##
105  # for some reason a==b is false, but there doesn't seem to be any
106  # difference between the nodes, so i'm checking all the attributes
107  # manually and blaming it on ActiveRecord
108  def assert_nodes_are_equal(a, b)
109    assert_equal a.id, b.id, "node IDs"
110    assert_equal a.latitude, b.latitude, "latitude on node #{a.id}"
111    assert_equal a.longitude, b.longitude, "longitude on node #{a.id}"
112    assert_equal a.changeset_id, b.changeset_id, "changeset ID on node #{a.id}"
113    assert_equal a.visible, b.visible, "visible on node #{a.id}"
114    assert_equal a.version, b.version, "version on node #{a.id}"
115    assert_equal a.tags, b.tags, "tags on node #{a.id}"
116  end
117
118  def basic_authorization(user, pass)
119    @request.env["HTTP_AUTHORIZATION"] = "Basic %s" % Base64.encode64("#{user}:#{pass}")
120  end
121
122  def content(c)
123    @request.env["RAW_POST_DATA"] = c.to_s
124  end
125 
126  # Used to check that the error header and the forbidden responses are given
127  # when the owner of the changset has their data not marked as public
128  def assert_require_public_data(msg = "Shouldn't be able to use API when the user's data is not public")
129    assert_response :forbidden, msg
130    assert_equal @response.headers['Error'], "You must make your edits public to upload new data", "Wrong error message"
131  end
132 
133  # Not sure this is the best response we could give
134  def assert_inactive_user(msg = "an inactive user shouldn't be able to access the API")
135    assert_response :unauthorized, msg
136    #assert_equal @response.headers['Error'], ""
137  end
138 
139  # Add more helper methods to be used by all tests here...
140end
Note: See TracBrowser for help on using the repository browser.