Project

General

Profile

Feature #44437 ยป 0001-Include-login-of-the-user-in-the-memberships-API-res.patch

Mizuki ISHIKAWA, 2026-09-09 03:49

View differences:

app/views/members/index.api.rsb
3 3
    api.membership do
4 4
      api.id membership.id
5 5
      api.project :id => membership.project.id, :name => membership.project.name
6
      api.__send__ membership.principal.class.name.underscore, :id => membership.principal.id, :name => membership.principal.name
6
      principal = membership.principal
7
      principal_attrs = {:id => principal.id, :name => principal.name}
8
      principal_attrs[:login] = principal.login if principal.is_a?(User)
9
      api.__send__ principal.class.name.underscore, principal_attrs
7 10
      api.array :roles do
8 11
        membership.member_roles.each do |member_role|
9 12
          if member_role.role
app/views/members/show.api.rsb
1 1
api.membership do
2 2
  api.id @member.id
3 3
  api.project :id => @member.project.id, :name => @member.project.name
4
  api.__send__ @member.principal.class.name.underscore, :id => @member.principal.id, :name => @member.principal.name
4
  principal = @member.principal
5
  principal_attrs = {:id => principal.id, :name => principal.name}
6
  principal_attrs[:login] = principal.login if principal.is_a?(User)
7
  api.__send__ principal.class.name.underscore, principal_attrs
5 8
  api.array :roles do
6 9
    @member.member_roles.each do |member_role|
7 10
      if member_role.role
test/integration/api_test/memberships_test.rb
26 26
    assert_response :success
27 27
    assert_equal 'application/xml', @response.media_type
28 28
    assert_select 'memberships[type=array] membership id', :text => '2' do
29
      assert_select '~ user[id="3"][name="Dave Lopper"]'
29
      assert_select '~ user[id="3"][name="Dave Lopper"][login="dlopper"]'
30 30
      assert_select '~ roles role[id="2"][name=Developer]'
31 31
    end
32 32
  end
......
45 45
        "id"=>1,
46 46
        "project" => {"name"=>"eCookbook", "id"=>1},
47 47
        "roles" => [{"name"=>"Manager", "id"=>1}],
48
        "user" => {"name"=>"John Smith", "id"=>2}
48
        "user" => {"name"=>"John Smith", "id"=>2, "login"=>"jsmith"}
49 49
      },
50 50
      json["memberships"]
51 51
    )
......
64 64
    get '/projects/ecookbook/memberships.xml', :headers => credentials('jsmith')
65 65
    assert_response :success
66 66
    assert_select 'memberships[type=array] membership id', :text => '2' do
67
      assert_select '~ user[id="3"][name="Dave Lopper"]'
67
      assert_select '~ user[id="3"][name="Dave Lopper"][login="dlopper"]'
68 68
    end
69 69
  end
70 70

  
71
  test "GET /memberships/:id.json should not return login for group membership" do
72
    member = Member.create!(:project_id => 1, :principal => Group.find(11), :role_ids => [2])
73

  
74
    get "/memberships/#{member.id}.json", :headers => credentials('jsmith')
75

  
76
    assert_response :success
77
    json = ActiveSupport::JSON.decode(response.body)
78
    assert_equal({"name"=>"B Team", "id"=>11}, json["membership"]["group"])
79
  end
80

  
71 81
  test "POST /projects/:project_id/memberships.xml should create the membership" do
72 82
    assert_difference 'Member.count' do
73 83
      post(
......
111 121
    assert_response :success
112 122
    assert_equal 'application/xml', @response.media_type
113 123
    assert_select 'membership id', :text => '2' do
114
      assert_select '~ user[id="3"][name="Dave Lopper"]'
124
      assert_select '~ user[id="3"][name="Dave Lopper"][login="dlopper"]'
115 125
      assert_select '~ roles role[id="2"][name=Developer]'
116 126
    end
117 127
  end
......
128 138
          "id" => 2,
129 139
          "project" => {"name"=>"eCookbook", "id"=>1},
130 140
          "roles" => [{"name"=>"Developer", "id"=>2}],
131
          "user" => {"name"=>"Dave Lopper", "id"=>3}
141
          "user" => {"name"=>"Dave Lopper", "id"=>3, "login"=>"dlopper"}
132 142
        }
133 143
      },
134 144
      json
    (1-1/1)