+ def test_create_success
+ user = create(:user)
+ auth_header = bearer_authorization_header user
+ assert_difference "Note.count", 1 do
+ assert_difference "NoteComment.count", 1 do
+ assert_difference "NoteSubscription.count", 1 do
+ post api_notes_path(:lat => -1.0, :lon => -1.0, :text => "This is a comment", :format => "json"), :headers => auth_header
+ end
+ end
+ end
+ assert_response :success
+ js = ActiveSupport::JSON.decode(@response.body)
+ assert_not_nil js
+ assert_equal "Feature", js["type"]
+ assert_equal "Point", js["geometry"]["type"]
+ assert_equal [-1.0, -1.0], js["geometry"]["coordinates"]
+ assert_equal "open", js["properties"]["status"]
+ assert_equal 1, js["properties"]["comments"].count
+ assert_equal "opened", js["properties"]["comments"].last["action"]
+ assert_equal "This is a comment", js["properties"]["comments"].last["text"]
+ assert_equal user.display_name, js["properties"]["comments"].last["user"]
+
+ note = Note.last
+ subscription = NoteSubscription.last
+ assert_equal user, subscription.user
+ assert_equal note, subscription.note
+ end
+
+ def test_create_no_scope_fail
+ user = create(:user)
+ auth_header = bearer_authorization_header user, :scopes => %w[read_prefs]
+
+ assert_no_difference "Note.count" do
+ post api_notes_path(:lat => -1.0, :lon => -1.0, :text => "This is a description", :format => "json"), :headers => auth_header
+
+ assert_response :forbidden
+ end
+ end
+