From c6e93fbba65c824ddc0e0b5b1ae1757ddf891677 Mon Sep 17 00:00:00 2001 From: ishikawa999 <14245262+ishikawa999@users.noreply.github.com> Date: Wed, 9 Sep 2026 10:25:46 +0900 Subject: [PATCH] Include login of the user in the memberships API responses --- app/views/members/index.api.rsb | 5 ++++- app/views/members/show.api.rsb | 5 ++++- test/integration/api_test/memberships_test.rb | 20 ++++++++++++++----- 3 files changed, 23 insertions(+), 7 deletions(-) diff --git a/app/views/members/index.api.rsb b/app/views/members/index.api.rsb index dd591ea7c1..73ebd78cd0 100644 --- a/app/views/members/index.api.rsb +++ b/app/views/members/index.api.rsb @@ -3,7 +3,10 @@ api.array :memberships, api_meta(:total_count => @member_count, :offset => @offs api.membership do api.id membership.id api.project :id => membership.project.id, :name => membership.project.name - api.__send__ membership.principal.class.name.underscore, :id => membership.principal.id, :name => membership.principal.name + principal = membership.principal + principal_attrs = {:id => principal.id, :name => principal.name} + principal_attrs[:login] = principal.login if principal.is_a?(User) + api.__send__ principal.class.name.underscore, principal_attrs api.array :roles do membership.member_roles.each do |member_role| if member_role.role diff --git a/app/views/members/show.api.rsb b/app/views/members/show.api.rsb index 55def9eaba..4f561e913e 100644 --- a/app/views/members/show.api.rsb +++ b/app/views/members/show.api.rsb @@ -1,7 +1,10 @@ api.membership do api.id @member.id api.project :id => @member.project.id, :name => @member.project.name - api.__send__ @member.principal.class.name.underscore, :id => @member.principal.id, :name => @member.principal.name + principal = @member.principal + principal_attrs = {:id => principal.id, :name => principal.name} + principal_attrs[:login] = principal.login if principal.is_a?(User) + api.__send__ principal.class.name.underscore, principal_attrs api.array :roles do @member.member_roles.each do |member_role| if member_role.role diff --git a/test/integration/api_test/memberships_test.rb b/test/integration/api_test/memberships_test.rb index baab2ebb91..c9e3271ea3 100644 --- a/test/integration/api_test/memberships_test.rb +++ b/test/integration/api_test/memberships_test.rb @@ -26,7 +26,7 @@ class Redmine::ApiTest::MembershipsTest < Redmine::ApiTest::Base assert_response :success assert_equal 'application/xml', @response.media_type assert_select 'memberships[type=array] membership id', :text => '2' do - assert_select '~ user[id="3"][name="Dave Lopper"]' + assert_select '~ user[id="3"][name="Dave Lopper"][login="dlopper"]' assert_select '~ roles role[id="2"][name=Developer]' end end @@ -45,7 +45,7 @@ class Redmine::ApiTest::MembershipsTest < Redmine::ApiTest::Base "id"=>1, "project" => {"name"=>"eCookbook", "id"=>1}, "roles" => [{"name"=>"Manager", "id"=>1}], - "user" => {"name"=>"John Smith", "id"=>2} + "user" => {"name"=>"John Smith", "id"=>2, "login"=>"jsmith"} }, json["memberships"] ) @@ -64,10 +64,20 @@ class Redmine::ApiTest::MembershipsTest < Redmine::ApiTest::Base get '/projects/ecookbook/memberships.xml', :headers => credentials('jsmith') assert_response :success assert_select 'memberships[type=array] membership id', :text => '2' do - assert_select '~ user[id="3"][name="Dave Lopper"]' + assert_select '~ user[id="3"][name="Dave Lopper"][login="dlopper"]' end end + test "GET /memberships/:id.json should not return login for group membership" do + member = Member.create!(:project_id => 1, :principal => Group.find(11), :role_ids => [2]) + + get "/memberships/#{member.id}.json", :headers => credentials('jsmith') + + assert_response :success + json = ActiveSupport::JSON.decode(response.body) + assert_equal({"name"=>"B Team", "id"=>11}, json["membership"]["group"]) + end + test "POST /projects/:project_id/memberships.xml should create the membership" do assert_difference 'Member.count' do post( @@ -111,7 +121,7 @@ class Redmine::ApiTest::MembershipsTest < Redmine::ApiTest::Base assert_response :success assert_equal 'application/xml', @response.media_type assert_select 'membership id', :text => '2' do - assert_select '~ user[id="3"][name="Dave Lopper"]' + assert_select '~ user[id="3"][name="Dave Lopper"][login="dlopper"]' assert_select '~ roles role[id="2"][name=Developer]' end end @@ -128,7 +138,7 @@ class Redmine::ApiTest::MembershipsTest < Redmine::ApiTest::Base "id" => 2, "project" => {"name"=>"eCookbook", "id"=>1}, "roles" => [{"name"=>"Developer", "id"=>2}], - "user" => {"name"=>"Dave Lopper", "id"=>3} + "user" => {"name"=>"Dave Lopper", "id"=>3, "login"=>"dlopper"} } }, json -- 2.55.0