Browse Source

HUE-9186 [editor] Fix issue with missing credentials in the editor v2 session auth modal

Johan Ahlen 5 năm trước cách đây
mục cha
commit
019aef3cc1

+ 5 - 0
desktop/core/src/desktop/js/jest/koTestUtils.js

@@ -112,3 +112,8 @@ export const waitForObservableChange = async observable =>
       resolve();
     });
   });
+
+export const simulateInput = (element, text) => {
+  element.value = text;
+  element.dispatchEvent(new Event('change'));
+};

+ 2 - 2
desktop/core/src/desktop/js/ko/components/__snapshots__/ko.sessionAuthModal.test.js.snap

@@ -18,13 +18,13 @@ exports[`ko.sessionAuthModal.js should render component 1`] = `
     <div class=\\"span6\\">
       <div class=\\"input-prepend\\">
         <span class=\\"add-on muted\\"><i class=\\"fa fa-user\\"></i></span>
-        <input name=\\"username\\" type=\\"text\\" data-bind=\\"value: $root.authSessionUsername\\" placeholder=\\"Username\\">
+        <input name=\\"username\\" data-test=\\"usernameInput\\" type=\\"text\\" data-bind=\\"textInput: authSessionUsername\\" placeholder=\\"Username\\">
       </div>
     </div>
     <div class=\\"span6\\">
       <div class=\\"input-prepend\\">
         <span class=\\"add-on muted\\"><i class=\\"fa fa-lock\\"></i></span>
-        <input name=\\"password\\" type=\\"password\\" data-bind=\\"value: $root.authSessionPassword\\" placeholder=\\"Password\\">
+        <input name=\\"password\\" data-test=\\"passwordInput\\" type=\\"password\\" data-bind=\\"textInput: authSessionPassword\\" placeholder=\\"Password\\">
       </div>
     </div>
   </div>

+ 3 - 3
desktop/core/src/desktop/js/ko/components/ko.sessionAuthModal.js

@@ -44,7 +44,7 @@ const TEMPLATE = `
     <div class="span6">
       <div class="input-prepend">
         <span class="add-on muted"><i class="fa fa-user"></i></span>
-        <input name="username" type="text" data-bind="value: $root.authSessionUsername" placeholder="${I18n(
+        <input name="username" data-test="usernameInput" type="text" data-bind="textInput: authSessionUsername" placeholder="${I18n(
           'Username'
         )}"/>
       </div>
@@ -52,7 +52,7 @@ const TEMPLATE = `
     <div class="span6">
       <div class="input-prepend">
         <span class="add-on muted"><i class="fa fa-lock"></i></span>
-        <input name="password" type="password" data-bind="value: $root.authSessionPassword" placeholder="${I18n(
+        <input name="password" data-test="passwordInput" type="password" data-bind="textInput: authSessionPassword" placeholder="${I18n(
           'Password'
         )}"/>
       </div>
@@ -132,7 +132,7 @@ componentUtils.registerComponent('session-auth-modal', undefined, TEMPLATE).then
     const data = {
       params: model,
       descendantsComplete: () => {
-        huePubSub.publish(SHOWN_EVENT);
+        huePubSub.publish(SHOWN_EVENT, $sessionAuthModal[0]);
       }
     };
 

+ 35 - 0
desktop/core/src/desktop/js/ko/components/ko.sessionAuthModal.test.js

@@ -18,6 +18,8 @@ import { SHOWN_EVENT, SHOW_EVENT } from './ko.sessionAuthModal';
 import huePubSub from 'utils/huePubSub';
 
 import 'ext/bootstrap.2.3.2.min';
+import sessionManager from 'apps/notebook2/execution/sessionManager';
+import { simulateInput } from '../../jest/koTestUtils';
 
 describe('ko.sessionAuthModal.js', () => {
   it('should render component', async () => {
@@ -34,4 +36,37 @@ describe('ko.sessionAuthModal.js', () => {
 
     expect(window.document.documentElement.outerHTML).toMatchSnapshot();
   });
+
+  it('should submit credentials', async () => {
+    huePubSub.publish(SHOW_EVENT, {
+      session: {
+        properties: []
+      },
+      message: 'hello'
+    });
+
+    const element = await new Promise(resolve => {
+      huePubSub.subscribeOnce(SHOWN_EVENT, resolve);
+    });
+
+    const TEST_USER = 'someUser';
+    const TEST_PASS = 'somePass';
+
+    let spyCalled = false;
+    jest.spyOn(sessionManager, 'createDetachedSession').mockImplementation(async options => {
+      expect(
+        options.properties.some(prop => prop.name === 'user' && prop.value === TEST_USER)
+      ).toBeTruthy();
+      expect(
+        options.properties.some(prop => prop.name === 'password' && prop.value === TEST_PASS)
+      ).toBeTruthy();
+      spyCalled = true;
+    });
+
+    simulateInput(element.querySelector('[data-test="usernameInput"]'), TEST_USER);
+    simulateInput(element.querySelector('[data-test="passwordInput"]'), TEST_PASS);
+    element.querySelector('.btn-primary').click();
+
+    expect(spyCalled).toBeTruthy();
+  });
 });