Ensure created/modified/updated_at are correct, add tests.
[arvados.git] / services / api / test / functional / arvados / v1 / links_controller_test.rb
1 require 'test_helper'
2
3 class Arvados::V1::LinksControllerTest < ActionController::TestCase
4
5   test "no symbol keys in serialized hash" do
6     link = {
7       properties: {username: 'testusername'},
8       link_class: 'test',
9       name: 'encoding',
10       tail_kind: 'arvados#user',
11       tail_uuid: users(:admin).uuid,
12       head_kind: 'arvados#virtualMachine',
13       head_uuid: virtual_machines(:testvm).uuid
14     }
15     authorize_with :admin
16     [link, link.to_json].each do |formatted_link|
17       post :create, link: formatted_link
18       assert_response :success
19       assert_not_nil assigns(:object)
20       assert_equal 'testusername', assigns(:object).properties['username']
21       assert_equal false, assigns(:object).properties.has_key?(:username)
22     end
23   end
24
25   %w(created_at updated_at modified_at).each do |attr|
26     {nil: nil, bogus: 2.days.ago}.each do |bogustype, bogusvalue|
27       test "cannot set #{bogustype} #{attr} in create" do
28         authorize_with :active
29         post :create, {
30           link: {
31             properties: {},
32             link_class: 'test',
33             name: 'test',
34           }.merge(attr => bogusvalue)
35         }
36         assert_response :success
37         resp = JSON.parse @response.body
38         assert_in_delta Time.now, Time.parse(resp[attr]), 3.0
39       end
40       test "cannot set #{bogustype} #{attr} in update" do
41         really_created_at = links(:test_timestamps).created_at
42         authorize_with :active
43         put :update, {
44           id: links(:test_timestamps).uuid,
45           link: {
46             :properties => {test: 'test'},
47             attr => bogusvalue
48           }
49         }
50         assert_response :success
51         resp = JSON.parse @response.body
52         case attr
53         when 'created_at'
54           assert_in_delta really_created_at, Time.parse(resp[attr]), 0.001
55         else
56           assert_in_delta Time.now, Time.parse(resp[attr]), 3.0
57         end
58       end
59     end
60   end
61 end