Skip to content

Commit

Permalink
Merge pull request #359 from hmcts/feature/EUI-1450-demo-develop-ud
Browse files Browse the repository at this point in the history
Feature/eui 1450 demo develop ud
  • Loading branch information
udaydenduluri33 committed Feb 6, 2020
2 parents 3b28064 + 100bfe5 commit 5284620
Show file tree
Hide file tree
Showing 62 changed files with 1,453 additions and 239 deletions.
29 changes: 29 additions & 0 deletions api/accounts/accountUtil.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
import { FeeAccount } from "../interfaces/feeAccountPayload"
import { http } from '../lib/http'

export function getAccountUrl(baseUrl: string, accountName: string) {
return `${baseUrl}/accounts/${accountName}`
}

export function getAccount(accountNumber: string, url: string): Promise<any> {
return new Promise((resolve, reject) => {
http.get(url)
.then(account => {
resolve(account)
})
.catch(err => {
err && err.status && err.status === 404 ? resolve({data: getMissingFeeAccount(accountNumber), status: 404}) : reject(err)
})
})
}

export function getMissingFeeAccount(accountNumber: string): FeeAccount {
return {
account_number: accountNumber,
account_name: null,
credit_limit: null,
available_balance: 0,
status: null,
effective_date: new Date(),
}
}
43 changes: 23 additions & 20 deletions api/accounts/index.ts
Original file line number Diff line number Diff line change
@@ -1,51 +1,54 @@
import { AxiosPromise } from 'axios'
import * as express from 'express'
import { FeeAccount } from '../interfaces/feeAccountPayload'
import { config } from '../lib/config'
import { http } from '../lib/http'
import { getAccount, getAccountUrl } from './accountUtil'

async function handleAddressRoute(req, res) {
let errReport: any
if (!req.query.accountNames) {
errReport = {
apiError: 'Account is missing',
apiStatusCode: '400',
apiStatusCode: 400,
message: 'Fee And Pay route error',
}
res.status(500).send(errReport)
res.status(errReport.apiStatusCode).send(errReport)
}
const accountNames = req.query.accountNames.split(',')
console.log('accountNames', accountNames)
const accounts = new Array()
const accounts = new Array<FeeAccount>()
const accountPromises = new Array<AxiosPromise<any>>()
accountNames.forEach((accountName: string) => accountPromises.push(getAccount(accountName)))

accountNames.forEach((accountNumber: string) => {
const url = getAccountUrl(config.services.feeAndPayApi, accountNumber)
accountPromises.push(getAccount(accountNumber, url))
})
let responseStatusCode
try {
await Promise.all(accountPromises).then(allAccounts => {
allAccounts.forEach(account => {
accounts.push(account.data)
await Promise.all(accountPromises).then(allAccounts => {
allAccounts.forEach(account => {
if (account.status === 404) {
responseStatusCode = 404
}
accounts.push(account.data)
})
})
})
} catch (error) {
console.error(error)
errReport = {
apiError: error && error.data && error.data.message ? error.data.message : error,
apiStatusCode: error && error.status ? error.status : '',
message: `Fee And Pay route error `,
}
res.status(500).send(errReport)
res.status(error.status).send(errReport)
return
}
res.send(accounts)
}

function getAccount(accountName: string): AxiosPromise<any> {
const url = `${config.services.feeAndPayApi}/accounts/${accountName}`
const promise = http.get(url)
return promise
if (responseStatusCode) {
res.status(responseStatusCode).send(accounts)
} else {
res.send(accounts)
}
}

export const router = express.Router({ mergeParams: true })

router.get('', handleAddressRoute)

export default router
44 changes: 44 additions & 0 deletions api/editUserPermissions/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
import * as express from 'express'
import { ErrorReport } from '../interfaces/errorReport'
import { config } from '../lib/config'
import { http } from '../lib/http'
import * as log4jui from '../lib/log4jui'

export const router = express.Router({ mergeParams: true })
const logger = log4jui.getLogger('outgoing')

router.put('', inviteUserRoute)

async function inviteUserRoute(req, res) {
let errReport: ErrorReport
if (!req.params.userId) {
errReport = getErrorReport('UserId is missing', '400', 'User Permissions route error')
res.status(400).send(errReport)
return
}
const payload = req.body
try {
const response = await http.put(getEditPermissionsUrl(config.services.rdProfessionalApi, req.params.userId), payload)
logger.info('response::', response.data)
res.send(response.data)
} catch (error) {
logger.info('error', error)
errReport = getErrorReport(getErrorMessage(error), error.status, getErrorMessage(error))
res.status(error.status).send(errReport)
}
}

function getErrorMessage(error: any): string {
return error && error.data ? error.data.message : ''
}
function getErrorReport(apiError: string, apiStatusCode: string, message: string): ErrorReport {
return {
apiError,
apiStatusCode,
message,
}
}
function getEditPermissionsUrl(rdProfessionalApiUrl: string, userId: string): string {
return `${rdProfessionalApiUrl}/refdata/external/v1/organisations/users/${userId}`
}
export default router
5 changes: 5 additions & 0 deletions api/interfaces/errorReport.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
export interface ErrorReport {
apiError: string
apiStatusCode: string
message: string
}
8 changes: 8 additions & 0 deletions api/interfaces/feeAccountPayload.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
export interface FeeAccount {
account_number: string
account_name: string
credit_limit: number
available_balance: number
status: string
effective_date: Date
}
56 changes: 26 additions & 30 deletions api/lib/config/environments/demo.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,40 +2,36 @@ export default {
services: {
ccdDataApi: 'http://ccd-data-store-api-demo.service.core-compute-demo.internal',
ccdDefApi: 'http://ccd-definition-store-api-demo.service.core-compute-demo.internal',
idamWeb: 'https://idam-web-public.aat.platform.hmcts.net',
idamApi: 'https://idam-api.aat.platform.hmcts.net',
s2s: 'http://rpe-service-auth-provider-aat.service.core-compute-aat.internal',
rdProfessionalApi: 'http://rd-professional-api-aat.service.core-compute-aat.internal',
feeAndPayApi: 'https://payment-api-demo.service.core-compute-demo.internal',
idamWeb: 'https://idam-web-public.demo.platform.hmcts.net',
idamApi: 'https://idam-api.demo.platform.hmcts.net',
s2s: 'http://rpe-service-auth-provider-demo.service.core-compute-demo.internal',
rdProfessionalApi: 'http://rd-professional-api-demo.service.core-compute-demo.internal',
feeAndPayApi: 'http://payment-api-demo.service.core-compute-demo.internal',
},
health: {
ccdDataApi: 'http://ccd-data-store-api-demo.service.core-compute-demo.internal/health',
ccdDefApi: 'http://ccd-definition-store-api-demo.service.core-compute-demo.internal/health',
idamWeb: 'https://idam-web-public.aat.platform.hmcts.net/health',
idamApi: 'https://idam-api.aat.platform.hmcts.net/health',
s2s: 'http://rpe-service-auth-provider-aat.service.core-compute-aat.internal/health',
rdProfessionalApi: 'http://rd-professional-api-aat.service.core-compute-aat.internal/health',
feeAndPayApi: 'https://payment-api-demo.service.core-compute-demo.internal/health',
idamWeb: 'https://idam-web-public.demo.platform.hmcts.net/health',
idamApi: 'https://idam-api.demo.platform.hmcts.net/health',
s2s: 'http://rpe-service-auth-provider-demo.service.core-compute-demo.internal/health',
rdProfessionalApi: 'http://rd-professional-api-demo.service.core-compute-demo.internal/health',
feeAndPayApi: 'http://payment-api-demo.service.core-compute-demo.internal/health',

},
proxy: {
host: '172.16.0.7',
port: 8080,
},
protocol: 'http',
secureCookie: false,
sessionSecret: 'secretSauce',
logging: 'debug',
jurisdictions: [
{id: 'SSCS'},
{id: 'AUTOTEST1'},
{id: 'DIVORCE'},
{id: 'PROBATE'},
{id: 'PUBLICLAW'},
{id: 'bulkscan'},
{id: 'BULKSCAN'},
{id: 'IA'},
{id: 'EMPLOYMENT'},
{id: 'CMC'},
],
useProxy: false,
secureCookie: false,
sessionSecret: 'secretSauce',
logging: 'debug',
jurisdictions: [
{id: 'SSCS'},
{id: 'AUTOTEST1'},
{id: 'DIVORCE'},
{id: 'PROBATE'},
{id: 'PUBLICLAW'},
{id: 'bulkscan'},
{id: 'BULKSCAN'},
{id: 'IA'},
{id: 'EMPLOYMENT'},
{id: 'CMC'}
],
}
4 changes: 2 additions & 2 deletions api/payments/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ async function handleAddressRoute(req, res) {
apiStatusCode: '400',
message: 'Fee And Pay route error',
}
res.status(500).send(errReport)
res.status(errReport.apiStatusCode).send(errReport)
}
try {
const response = await http.get(
Expand All @@ -23,7 +23,7 @@ async function handleAddressRoute(req, res) {
apiStatusCode: error.status,
message: 'Fee And Pay route error',
}
res.status(500).send(errReport)
res.status(errReport.apiStatusCode).send(errReport)
}
}

Expand Down
4 changes: 4 additions & 0 deletions api/routes.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
import * as express from 'express'
import accountsRouter from './accounts'
import * as auth from './auth'
import editUserPermissions from './editUserPermissions'
import healthCheck from './healthCheck'
import inviteUser from './inviteUser'
import getJurisdictions from './jurisdictions'
import organisationRouter from './organisation'
import payments from './payments'
import suspendUser from './suspendUser'
import userDetailsRouter from './user'
import getUserList from './userList'

Expand All @@ -21,5 +23,7 @@ router.use('/userList', getUserList)
router.use('/userDetails', getUserList)
router.use('/jurisdictions', getJurisdictions)
router.use('/payments/:account', payments)
router.use('/user/:userId/suspend', suspendUser)

router.use('/editUserPermissions/users/:userId', editUserPermissions)
export default router
27 changes: 27 additions & 0 deletions api/suspendUser/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import * as express from 'express'
import { config } from '../lib/config'
import { http } from '../lib/http'
import * as log4jui from '../lib/log4jui'

export const router = express.Router({ mergeParams: true })
const logger = log4jui.getLogger('outgoing')

router.put('/', suspendUser)

async function suspendUser(req, res) {
const payload = req.body
try {
const response = await http.put(`${config.services.rdProfessionalApi}/refdata/external/v1/organisations/users/${req.params.userId}`, payload)
logger.info('response::', response.data)
res.send(response.data)
} catch (error) {
logger.info('error', error)
const errReport = {
apiError: error.data.message,
apiStatusCode: error.status,
message: error.data.message,
}
res.status(error.status).send(errReport)
}
}
export default router
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
"start:node": "cd api && yarn watch",
"start:node:docker": "PUI_ENV=ldocker;cd api && yarn watch",
"test:node": "cd api && yarn test",
"test:smoke": "sh whitelist.sh && ts-node ./test/integration/tests/test.ts",
"test:smoke": "sh whitelist.sh",
"test:smoke:functional": "sh whitelist.sh && webdriver-manager update --versions.chrome 2.40 && protractor ./test/e2e/config/smoke.conf.js --local",
"test:functional": "webdriver-manager update --versions.chrome 2.40 && protractor ./test/e2e/config/functional.conf.js",
"test:functional:local": "webdriver-manager update --versions.chrome 2.40 && protractor ./test/e2e/config/functional.conf.js --local",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import {FormGroup} from '@angular/forms';
template: `
<div class="govuk-checkboxes__item" [formGroup]="group">
<input class="govuk-checkboxes__input" type="checkbox" [attr.aria-describedby]="config.hint ? config.value+'-item-hint' : null"
[id]="config.id" [name]="config.name" [formControlName]="config.value">
[id]="config.id" [name]="config.name" [formControlName]="config.value" [checked]="isChecked">
<lib-gov-label appRemoveHost [config]="config"></lib-gov-label>
<span [id]="config.value+'-item-hint'" class="govuk-hint govuk-checkboxes__hint">
{{config.hint}}
Expand All @@ -22,6 +22,7 @@ export class GovUkCheckboxComponent implements OnInit {
constructor() { }
@Input() group: FormGroup;
@Input() config: {value: string, label: string, hint: string; name: string; focusOn: string; id: string; classes: string};
@Input() isChecked: boolean = false;

id: string;
/**
Expand Down
3 changes: 2 additions & 1 deletion src/app/app.constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,8 @@ const userRoles = [

{ role: 'pui-organisation-manager', roleType: 'manageOrganisations'},
{ role: 'pui-user-manager', roleType: 'manageUsers' },
{ role: 'pui-case-manager', roleType: 'manageCases'}
{ role: 'pui-case-manager', roleType: 'manageCases'},
{ role: 'pui-finance-manager', roleType: 'managePayments'}
];

const jurisdictions = [
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<ng-container *ngIf="errorMessages.length > 0">
<div class="govuk-error-summary" aria-labelledby="error-summary-title" role="alert" tabindex="-1" data-module="error-summary">
<h2 class="govuk-error-summary__title" id="error-summary-title">
There is a problem
</h2>
<div class="govuk-error-summary__body">
<ul class="govuk-list govuk-error-summary__list">
<ng-container *ngFor="let errorMessage of errorMessages">
<li>
<a href="#fee-error">{{ errorMessage }}</a>
</li>
</ng-container>
</ul>
</div>
</div>
</ng-container>
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import {Component, OnInit, Input} from '@angular/core';
@Component({
selector: 'app-fee-account-notification-banner',
templateUrl: './fee-account-error-notification.component.html',
})

export class FeeAccountErrorNotificationComponent implements OnInit {
constructor() {}
@Input() public errorMessages: string[];
public ngOnInit(): void {

}

}
Original file line number Diff line number Diff line change
@@ -1 +1,8 @@
<app-govuk-table [columnConfig]="columnConfig" [rows]="tableRows" [firstCellIsHeader]="false" [caption]="''"></app-govuk-table>
<ng-container *ngIf="transactions.length > 0; else noRows">
<app-govuk-table
[columnConfig]="columnConfig" [rows]="transactions" [firstCellIsHeader]="false" [caption]="''"
></app-govuk-table>
</ng-container>
<ng-template #noRows>
<p>No transactions found.</p>
</ng-template>
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,4 @@ describe('TransactionsComponent', () => {
expect(component).toBeTruthy();
});

it('should fill tableRows', () => {
component.transactions = [{dummy: 'something'}];
component.ngOnChanges();
expect(component.tableRows).toBeTruthy([{dummy: 'something'}]);
});

});
Loading

0 comments on commit 5284620

Please sign in to comment.