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

Last change on this file since 16046 was 16046, checked in by zere, 10 years ago

Adding initial version of the OAuth token authentication method. This adds basic OAuth support for registering apps, getting and revoking keys, etc... The tokens come with 6 separate permissions bits; read/write user preferences, write diaries, write API and read/write GPS traces. Needs more tests.

File size: 5.7 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 ActiveSupport::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
75    fixtures :client_applications
76  end
77
78  ##
79  # takes a block which is executed in the context of a different
80  # ActionController instance. this is used so that code can call methods
81  # on the node controller whilst testing the old_node controller.
82  def with_controller(new_controller)
83    controller_save = @controller
84    begin
85      @controller = new_controller
86      yield
87    ensure
88      @controller = controller_save
89    end
90  end
91
92  ##
93  # for some reason assert_equal a, b fails when the ways are actually
94  # equal, so this method manually checks the fields...
95  def assert_ways_are_equal(a, b)
96    assert_not_nil a, "first way is not allowed to be nil"
97    assert_not_nil b, "second way #{a.id} is not allowed to be nil"
98    assert_equal a.id, b.id, "way IDs"
99    assert_equal a.changeset_id, b.changeset_id, "changeset ID on way #{a.id}"
100    assert_equal a.visible, b.visible, "visible on way #{a.id}, #{a.visible.inspect} != #{b.visible.inspect}"
101    assert_equal a.version, b.version, "version on way #{a.id}"
102    assert_equal a.tags, b.tags, "tags on way #{a.id}"
103    assert_equal a.nds, b.nds, "node references on way #{a.id}"
104  end
105
106  ##
107  # for some reason a==b is false, but there doesn't seem to be any
108  # difference between the nodes, so i'm checking all the attributes
109  # manually and blaming it on ActiveRecord
110  def assert_nodes_are_equal(a, b)
111    assert_equal a.id, b.id, "node IDs"
112    assert_equal a.latitude, b.latitude, "latitude on node #{a.id}"
113    assert_equal a.longitude, b.longitude, "longitude on node #{a.id}"
114    assert_equal a.changeset_id, b.changeset_id, "changeset ID on node #{a.id}"
115    assert_equal a.visible, b.visible, "visible on node #{a.id}"
116    assert_equal a.version, b.version, "version on node #{a.id}"
117    assert_equal a.tags, b.tags, "tags on node #{a.id}"
118  end
119
120  def basic_authorization(user, pass)
121    @request.env["HTTP_AUTHORIZATION"] = "Basic %s" % Base64.encode64("#{user}:#{pass}")
122  end
123
124  def content(c)
125    @request.env["RAW_POST_DATA"] = c.to_s
126  end
127 
128  # Used to check that the error header and the forbidden responses are given
129  # when the owner of the changset has their data not marked as public
130  def assert_require_public_data(msg = "Shouldn't be able to use API when the user's data is not public")
131    assert_response :forbidden, msg
132    assert_equal @response.headers['Error'], "You must make your edits public to upload new data", "Wrong error message"
133  end
134 
135  # Not sure this is the best response we could give
136  def assert_inactive_user(msg = "an inactive user shouldn't be able to access the API")
137    assert_response :unauthorized, msg
138    #assert_equal @response.headers['Error'], ""
139  end
140 
141  def assert_no_missing_translations(msg="")
142    assert_select "span[class=translation_missing]", false, "Missing translation #{msg}"
143  end
144 
145  # Add more helper methods to be used by all tests here...
146end
Note: See TracBrowser for help on using the repository browser.