]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-11723 Don't pass name and email values when updating a non-local user
authorWouter Admiraal <wouter.admiraal@sonarsource.com>
Thu, 27 Jun 2019 12:49:52 +0000 (14:49 +0200)
committerSonarTech <sonartech@sonarsource.com>
Fri, 28 Jun 2019 18:21:11 +0000 (20:21 +0200)
server/sonar-web/src/main/js/apps/users/components/UserForm.tsx
server/sonar-web/src/main/js/apps/users/components/__tests__/UserForm-test.tsx

index bc46891136a76e7e925c8bb28c93084a70c96547..6fa6ff036b2a520172a8ef7ef28d3712bb67e163 100644 (file)
@@ -117,11 +117,13 @@ export default class UserForm extends React.PureComponent<Props, State> {
   };
 
   handleUpdateUser = () => {
+    const { user } = this.props;
+
     this.setState({ submitting: true });
     updateUser({
-      email: this.state.email,
+      email: user!.local ? this.state.email : undefined,
       login: this.state.login,
-      name: this.state.name,
+      name: user!.local ? this.state.name : undefined,
       scmAccount: uniq(this.state.scmAccounts)
     }).then(() => {
       this.props.onUpdateUsers();
index e8b487d50c5d19defa0032b0407d97febe568847..e4c4871d7839ad404792eb13d0069569dd7a2bdf 100644 (file)
@@ -29,6 +29,10 @@ jest.mock('../../../../api/users', () => ({
   updateUser: jest.fn().mockResolvedValue({})
 }));
 
+beforeEach(() => {
+  jest.clearAllMocks();
+});
+
 it('should render correctly', () => {
   expect(shallowRender().dive()).toMatchSnapshot();
   expect(shallowRender({ user: undefined }).dive()).toMatchSnapshot();
@@ -86,7 +90,7 @@ it('should correctly create a new user', () => {
   });
 });
 
-it('should correctly update a user', () => {
+it('should correctly update a local user', () => {
   const email = 'foo@bar.ch';
   const login = 'foo';
   const name = 'Foo';
@@ -103,6 +107,25 @@ it('should correctly update a user', () => {
   });
 });
 
+it('should correctly update a non-local user', () => {
+  const email = 'foo@bar.ch';
+  const login = 'foo';
+  const name = 'Foo';
+  const scmAccounts = ['gh', 'bitbucket'];
+  const wrapper = shallowRender({
+    user: mockUser({ email, local: false, login, name, scmAccounts })
+  }).dive();
+
+  submit(wrapper.find('form'));
+
+  expect(updateUser).toBeCalledWith(
+    expect.not.objectContaining({
+      email,
+      name
+    })
+  );
+});
+
 function shallowRender(props: Partial<UserForm['props']> = {}) {
   return shallow(
     <UserForm onClose={jest.fn()} onUpdateUsers={jest.fn()} user={mockUser()} {...props} />