コード例 #1
0
  return runWithPouchDump('billing', async function() {
    await authenticateUser();
    await visit('/pricing');
    await click('button:contains(+ new item)');
    assert.equal(currentURL(), '/pricing/edit/new');

    await fillIn('.price-name input', 'Xray Foot');
    await fillIn('.price-amount input', 100);
    await fillIn('.price-department input', 'Imaging');
    await select('.price-category', 'Imaging');
    await click('button:contains(Add):last');
    await waitToAppear('.modal-dialog');
    assert.dom('.modal-title').hasText('Pricing Item Saved', 'Pricing Item saved');

    await click('button:contains(Ok)');
    await click('button:contains(Add Override)');
    await waitToAppear('.modal-dialog');
    assert.dom('.modal-title').hasText('Add Override', 'Add Override Dialog displays');

    await select('.pricing-profile', 'Half off');
    await fillIn('.pricing-override-price input', 20);
    await click('button:contains(Add):last');
    await waitToAppear('.override-profile');
    assert.dom('.override-profile').hasText('Half off', 'Pricing override saved');

    await click('button:contains(Delete)');
    await waitToAppear('.modal-dialog');
    await click('button:contains(Ok)');
    assert.dom('.override-profile').doesNotExist('Pricing override deleted');
  });
コード例 #2
0
async function generateReport(reportName, startDate, endDate) {
  await authenticateUser();
  await visit('/patients/reports');
  await select('[data-test-selector="select-report-type"] select', reportName);

  await fillIn('[data-test-selector="select-report-start-date"] input', startDate);
  await fillIn('[data-test-selector="select-report-end-date"] input', endDate);

  await click('button:contains(Generate Report)');
}
コード例 #3
0
 return runWithPouchDump('billing', async function() {
   await authenticateUser();
   await visit(path);
   assert.equal(currentURL(), path);
   includesPrices.forEach(function(priceName) {
     assert.equal(find(`.price-name:contains(${priceName})`).length, 1, `${priceName} displays`);
   });
   excludesPrices.forEach(function(priceName) {
     assert.equal(find(`.price-name:contains(${priceName})`).length, 0, `${priceName} is not present`);
   });
 });
コード例 #4
0
  return runWithPouchDump('default', async function() {
    await authenticateUser();
    await visit('/patients/reports');

    let generateReportButton = find('button:contains(Generate Report)');
    assert.equal(currentURL(), '/patients/reports');
    assert.equal(generateReportButton.length, 1, 'Generate Report button is visible');
    let reportType = find('[data-test-selector="select-report-type"]');
    assert.equal(reportType.length, 1, 'Report type select is visible');
    assert.equal(reportType.find(':selected').text().trim(), 'Admissions Detail', 'Default value selected"');
  });
コード例 #5
0
    return runWithPouchDump('default', async function() {
      await authenticateUser();
      await visit('/patients/reports');
      await select('[data-test-selector="select-report-type"] select', reportName);

      let reportStartDate = find('[data-test-selector="select-report-start-date"]');
      let reportEndDate = find('[data-test-selector="select-report-end-date"]');
      assert.equal(reportStartDate.length, 1, 'Report start date select is visible');
      assert.equal(reportEndDate.length, 1, 'Report end date select is visible');
      let reportType = find('[data-test-selector="select-report-type"] select');
      assert.equal(reportType.find(':selected').text().trim(), reportName, `${reportName} option selected`);
    });
コード例 #6
0
  return runWithPouchDump('default', async function() {
    await authenticateUser();
    await visit('/patients');
    assert.equal(currentURL(), '/patients');

    let noPatientsFound = find('[data-test-selector="no-patients-found"]');
    assert.equal(noPatientsFound.text().trim(), 'No patients found. Create a new patient record?', 'no records found');
    let newPatientButton = find('button:contains(+ new patient)');
    assert.equal(newPatientButton.length, 1, 'Add new patient button is visible');

    await click('button:contains(+ new patient)');
    assert.equal(currentURL(), '/patients/edit/new');
  });
コード例 #7
0
  return runWithPouchDump('billing', async function() {
    await authenticateUser();
    await visit('/pricing/profiles');
    assert.equal(currentURL(), '/pricing/profiles');
    assert.equal(find('.pricing-profile-name:contains(Half off)').length, 1, 'Pricing profile exists to delete');

    await click('button:contains(Delete)');
    await waitToAppear('.modal-dialog');
    assert.dom('.modal-title').hasText('Delete Profile', 'Pricing Profile delete confirmation is displayed');

    await click('button:contains(Ok)');
    await waitToDisappear('.pricing-profile-name:contains(Half off)');
    assert.equal(find('.pricing-profile-name:contains(Half off)').length, 0, 'Pricing profile disappears from list');
  });
コード例 #8
0
  return runWithPouchDump('default', async function() {
    await authenticateUser();
    await visit('/patients/edit/new');
    assert.equal(currentURL(), '/patients/edit/new');

    await fillIn('.test-first-name input', 'John');
    await fillIn('.test-last-name input', 'Doe');
    await click('.panel-footer button:contains(Add)');
    await waitToAppear('.message:contains(The patient record for John Doe has been saved)');
    assert.dom('.message').hasText('The patient record for John Doe has been saved.');

    await waitToAppear('.patient-summary');
    assert.dom('.patient-summary').exists();
    assert.dom('#general').exists();
  });
コード例 #9
0
  return runWithPouchDump('billing', async function() {
    await authenticateUser();
    await visit('/pricing/lab');
    assert.equal(currentURL(), '/pricing/lab');
    assert.equal(find('.price-name:contains(Blood test)').length, 1, 'Price exists to delete');

    await click('button:contains(Delete)');
    await waitToAppear('.modal-dialog');
    assert.dom('.alert').hasText(
      'Are you sure you wish to delete Blood test?',
      'Pricing item is displayed for deletion'
    );

    await click('button:contains(Delete):last');
    await waitToDisappear('.price-name:contains(Blood test)');
    assert.equal(find('.price-name:contains(Blood test)').length, 0, 'Price disappears from price list');
  });
コード例 #10
0
 return runWithPouchDump('default', async function() {
   let role = PREDEFINED_USER_ROLES.findBy('name', 'User Administrator');
   await authenticateUser({
     roles: role.roles,
     role: role.name,
     authenticated: {
       role: role.name
     }
   });
   await addAllUsers(assert);
   await visit('/'); // Default home page for User Administrator is admin/users
   assert.equal(currentURL(), '/admin/users', 'User Administrator initial page displays');
   assert.equal(find('td.user-display-name:first').text(), 'HospitalRun Administrator');
   assert.equal(find('td.user-name:first').text(), 'hradmin');
   assert.equal(find('td.user-email:first').text(), '*****@*****.**');
   assert.equal(find('td.user-role:first').text(), 'System Administrator');
 });
コード例 #11
0
  return runWithPouchDump('billing', async function() {
    await authenticateUser();
    await visit('/pricing/profiles');
    assert.equal(currentURL(), '/pricing/profiles');

    await click('button:contains(+ new item)');
    await waitToAppear('.modal-dialog');
    assert.dom('.modal-title').hasText('New Pricing Profile', 'New Pricing Profile modal appears');

    await fillIn('.pricing-profile-name input', 'Quarter Off');
    await fillIn('.pricing-profile-percentage input', 25);
    await fillIn('.pricing-profile-discount input', 10);
    await click('button:contains(Add)');
    await waitToAppear('.modal-title:contains(Pricing Profile Saved)');
    await click('button:contains(Ok)');
    await waitToAppear('.pricing-profile-name:contains(Quarter Off)');
    assert.equal(find('.pricing-profile-name:contains(Quarter Off)').text(), 'Quarter Off', 'New price profile displays');
  });
コード例 #12
0
  return runWithPouchDump('default', async function() {

    // go to /pricing/lab, add item and confirm Pricing Type is 'Lab Procedure' (bug fixed in PR #1526)
    await authenticateUser();
    await visit('/pricing/lab');
    await click('button:contains(+ new item)');
    assert.equal(currentURL(), '/pricing/edit/newLab');
    await fillIn('.price-name input', 'Test Lab Item');
    await fillIn('.price-amount input', 10);
    await fillIn('.price-department input', 'Test Expense Acct');
    await click('button:contains(Add):last');

    await waitToAppear('.modal-dialog');
    assert.dom('.modal-title').hasText('Pricing Item Saved', 'Pricing Item saved');
    await click('button:contains(Return)');

    assert.dom('td:nth-child(4)').hasText('Lab Procedure');

    await click('button:contains(Delete)');
    await waitToAppear('.modal-dialog');
    await click('button:contains(Delete):last');

    // test that changing Category sets proper Pricing Type depending on which Category selected
    await visit('/pricing/ward');
    await click('button:contains(+ new item)');
    assert.equal(currentURL(), '/pricing/edit/newWard');

    await fillIn('.price-name input', 'Test Ward Item');
    await fillIn('.price-amount input', 10);
    await fillIn('.price-department input', 'Test Expense Acct');

    await fillIn('.price-type input', 'fake price type');
    await select('.price-category', 'Procedure');
    assert.dom('.price-type input').hasText('', 'Changing Category to "Procedure" sets Pricing Type to ""');

    await select('.price-category', 'Imaging');
    await click('button:contains(Add):last');

    await waitToAppear('.modal-dialog');
    assert.dom('.modal-title').hasText('Pricing Item Saved', 'Pricing Item saved');
    await click('button:contains(Return)');

    assert.dom('td:nth-child(4)').hasText('Imaging Procedure');
  });
コード例 #13
0
  return runWithPouchDump('patient', async function() {
    await authenticateUser();
    await visit('/patients');

    await fillIn('[role="search"] div input', 'Joe');
    await click('.glyphicon-search');
    assert.equal(currentURL(), '/patients/search/Joe', 'Searched for Joe');
    assert.equal(find('button:contains(Delete)').length, 1, 'There is one search item');

    await fillIn('[role="search"] div input', 'joe');
    await click('.glyphicon-search');
    assert.equal(currentURL(), '/patients/search/joe', 'Searched for all lower case joe');
    assert.equal(find('button:contains(Delete)').length, 1, 'There is one search item');

    await fillIn('[role="search"] div input', 'ItemNotFound');
    await click('.glyphicon-search');
    assert.equal(currentURL(), '/patients/search/ItemNotFound', 'Searched for ItemNotFound');
    assert.equal(find('button:contains(Delete)').length, 0, 'There is no search result');
  });
コード例 #14
0
  return runWithPouchDump('patient', async function() {
    await authenticateUser();
    await visit('/patients');
    assert.equal(currentURL(), '/patients', 'Patient listing url is correct');
    assert.equal(find('tr.clickable td:contains(Joe)').length, 1, 'One patient exists to delete.');

    await click('tr.clickable button:contains(Delete)');
    await waitToAppear('.modal-dialog');
    assert.dom('.modal-title').hasText('Delete Patient', 'Delete Patient ');
    assert.dom('.modal-body').hasText(
      'Are you sure you wish to delete Joe Bagadonuts?',
      'Patient information appears in modal'
    );

    await click('.modal-footer button:contains(Delete)');
    await waitToDisappear('.modal-dialog');
    await waitToDisappear('tr.clickable td:contains(Joe)');
    assert.equal(find('tr.clickable td:contains(Joe)').length, 0, 'Patient has been successfully deleted.');
  });
コード例 #15
0
  return runWithPouchDump('patient', async function() {
    await authenticateUser();
    await visit('/patients/admitted');
    assert.equal(currentURL(), '/patients/admitted');
    assert.dom('.clickable').exists({ count: 1 }, 'One patient is listed');

    await click('button:contains(Discharge)');
    await waitToAppear('.view-current-title:contains(Edit Visit)');
    assert.equal(currentURL(), '/visits/edit/03C7BF8B-04E0-DD9E-9469-96A5604F5340', 'should return visits/edit instead');

    await click('.panel-footer button:contains(Discharge)');
    await waitToAppear('.modal-dialog');
    assert.dom('.modal-title').hasText('Patient Discharged', 'Patient has been discharged');

    await click('button:contains(Ok)');
    await visit('/patients/admitted');
    await waitToAppear('.view-current-title:contains(Admitted Patients)');
    assert.dom('.clickable').doesNotExist('No patient is listed');
  });
コード例 #16
0
  return runWithPouchDump('billing', async function() {
    await authenticateUser();
    await visit('/pricing');

    await fillIn('[role="search"] div input', 'Xray Hand');
    await click('.glyphicon-search');
    assert.equal(currentURL(), '/pricing/search/Xray%20Hand', 'Searched for Name: Xray Hand');
    assert.equal(find('button:contains(Delete)').length, 1, 'There is one search item');

    await fillIn('[role="search"] div input', 'Blood');
    await click('.glyphicon-search');
    assert.equal(currentURL(), '/pricing/search/Blood', 'Searched for Name: Blood');
    assert.equal(find('button:contains(Delete)').length, 1, 'There is one search item');

    await fillIn('[role="search"] div input', 'Leg');
    await click('.glyphicon-search');
    assert.equal(currentURL(), '/pricing/search/Leg', 'Searched for Name: Leg');
    assert.equal(find('button:contains(Delete)').length, 1, 'There is one search item');

    await fillIn('[role="search"] div input', 'Gauze');
    await click('.glyphicon-search');
    assert.equal(currentURL(), '/pricing/search/Gauze', 'Searched for Name: Gauze');
    assert.equal(find('button:contains(Delete)').length, 1, 'There is one search item');

    await fillIn('[role="search"] div input', 'xray');
    await click('.glyphicon-search');
    assert.equal(currentURL(), '/pricing/search/xray', 'Searched for all lower case xray');
    assert.equal(find('button:contains(Delete)').length, 1, 'There is one search item');

    await fillIn('[role="search"] div input', 'd');
    await click('.glyphicon-search');
    assert.equal(currentURL(), '/pricing/search/d', 'Searched for the letter d');
    assert.equal(find('button:contains(Delete)').length, 3, 'There are three search items');

    await fillIn('[role="search"] div input', 'ItemNotFound');
    await click('.glyphicon-search');
    assert.equal(currentURL(), '/pricing/search/ItemNotFound', 'Searched for ItemNotFound');
    assert.dom('.clickable').doesNotExist('There is no search result');
  });
コード例 #17
0
  return runWithPouchDump('default', async function() {
    await authenticateUser();
    await addAllUsers(assert);

    await visit('/admin/users');
    stubRequest('put', '/db/_users/org.couchdb.user:jane@donuts.com', function(request) {
      let expectedBody = {
        _id: 'org.couchdb.user:jane@donuts.com',
        deleted: false,
        displayName: 'Jane Bagadonuts',
        email: '*****@*****.**',
        name: '*****@*****.**',
        password: '******',
        roles: ['Hospital Administrator', 'user'],
        userPrefix: 'p02',
        type: 'user'
      };
      assert.equal(request.requestBody, JSON.stringify(expectedBody), 'New user data sent to the server');
      request.ok({
        'ok': true,
        'id': 'org.couchdb.user:jane@donuts.com',
        'rev': '1-ef3d54502f2cc8e8f73d8547881f0836'
      });
    });

    await visit('/admin/users/edit/new');
    await select('.user-role', 'Hospital Administrator');
    await fillIn('.user-display-name input', 'Jane Bagadonuts');
    await fillIn('.user-email input', '*****@*****.**');
    await fillIn('.user-password input', 'password');
    await click('button:contains(Add)');
    await waitToAppear('.modal-dialog');
    assert.dom('.modal-title').hasText('User Saved', 'User was saved successfully');
    assert.dom('.view-current-title').hasText('Edit User', 'Page title changed to Edit User');

    await click('button:contains(Ok)');
  });
コード例 #18
0
  return runWithPouchDump('default', async function() {
    await authenticateUser();
    await addAllUsers(assert);

    stubRequest('put', '/db/_users/org.couchdb.user:joe@donuts.com', function(request) {
      let expectedBody = {
        _id: 'org.couchdb.user:joe@donuts.com',
        derived_key: 'derivedkeyhere',
        deleted: true,
        displayName: 'Joe Bagadonuts',
        email: '*****@*****.**',
        iterations: 10,
        name: '*****@*****.**',
        password_scheme: 'pbkdf2',
        _rev: '1-ef3d54502f2cc8e8f73d8547881f0836',
        roles: ['deleted'],
        salt: 'saltgoeshere',
        userPrefix: 'p01',
        type: 'user'
      };
      assert.equal(request.requestBody, JSON.stringify(expectedBody), 'Delete user request sent to the server');
      request.ok({
        'ok': true,
        'id': 'org.couchdb.user:joe@donuts.com',
        'rev': '1-ef3d54502f2cc8e8f73d8547881f0836'
      });
    });

    await visit('/admin/users');
    await click('button:contains(Delete):last');
    await waitToAppear('.modal-dialog');
    assert.dom('.alert').hasText('Are you sure you wish to delete ?', 'User is displayed for deletion');

    await click('button:contains(Delete):last');
    assert.equal(find('.user-email:contains(joe@donuts.com)').length, 0, 'User disappears from user list');
  });