web: test trailing slash are removed from renderTree
This change refactors the renderTree method to test it without React. Change-Id: Id1fcce671a5f8c44057a135a406298048a53bdb3
This commit is contained in:
committed by
Tobias Henkel
parent
0811c5025e
commit
f9fe0adfdb
@@ -56,6 +56,33 @@ export const requestBuildOutput = () => ({
|
||||
})
|
||||
|
||||
// job-output processing functions
|
||||
export function renderTree(tenant, build, path, obj, textRenderer, defaultRenderer) {
|
||||
const node = {}
|
||||
let name = obj.name
|
||||
|
||||
if ('children' in obj && obj.children) {
|
||||
node.nodes = obj.children.map(
|
||||
n => renderTree(tenant, build, path+obj.name+'/', n,
|
||||
textRenderer, defaultRenderer))
|
||||
}
|
||||
if (obj.mimetype === 'application/directory') {
|
||||
name = obj.name + '/'
|
||||
} else {
|
||||
node.icon = 'fa fa-file-o'
|
||||
}
|
||||
|
||||
let log_url = build.log_url
|
||||
if (log_url.endsWith('/')) {
|
||||
log_url = log_url.slice(0, -1)
|
||||
}
|
||||
if (obj.mimetype === 'text/plain') {
|
||||
node.text = textRenderer(tenant, build, path, name, log_url, obj)
|
||||
} else {
|
||||
node.text = defaultRenderer(log_url, path, name, obj)
|
||||
}
|
||||
return node
|
||||
}
|
||||
|
||||
export function didTaskFail(task) {
|
||||
if (task.failed) {
|
||||
return true
|
||||
|
||||
@@ -24,4 +24,13 @@ it('processes job-output properly', () => {
|
||||
|
||||
expect(buildAction.hasInterestingKeys({rc: 42}, ['rc'])).toEqual(true)
|
||||
expect(buildAction.hasInterestingKeys({noop: 42}, ['rc'])).toEqual(false)
|
||||
|
||||
// Check trailing / are removed
|
||||
let obj = {children: [], mimetype: 'test', name: 'test'}
|
||||
let tree = buildAction.renderTree(
|
||||
{linkPrefix: 'test/'},
|
||||
{log_url: 'http://test/', uuid: 'test'},
|
||||
'/', obj, (a) => (a), (a) => (a))
|
||||
expect(tree).toEqual(
|
||||
{'icon': 'fa fa-file-o', 'nodes': [], 'text': 'http://test'})
|
||||
})
|
||||
|
||||
@@ -19,41 +19,8 @@ import {
|
||||
} from 'patternfly-react'
|
||||
import { Link } from 'react-router-dom'
|
||||
|
||||
const renderTree = (tenant, build, path, obj) => {
|
||||
const node = {}
|
||||
let name = obj.name
|
||||
import { renderTree } from '../../actions/build'
|
||||
|
||||
if ('children' in obj && obj.children) {
|
||||
node.nodes = obj.children.map(n => renderTree(tenant, build, path+obj.name+'/', n))
|
||||
}
|
||||
if (obj.mimetype === 'application/directory') {
|
||||
name = obj.name + '/'
|
||||
} else {
|
||||
node.icon = 'fa fa-file-o'
|
||||
}
|
||||
|
||||
let log_url = build.log_url
|
||||
if (log_url.endsWith('/')) {
|
||||
log_url = log_url.slice(0, -1)
|
||||
}
|
||||
if (obj.mimetype === 'text/plain') {
|
||||
node.text = (
|
||||
<span>
|
||||
<Link to={tenant.linkPrefix + '/build/' + build.uuid + '/log' + path + name}>{obj.name}</Link>
|
||||
|
||||
(<a href={log_url + path + name}>raw</a>
|
||||
<span className="fa fa-external-link"/>)
|
||||
</span>)
|
||||
} else {
|
||||
node.text = (
|
||||
<span>
|
||||
<a href={log_url + path + name}>{obj.name}</a>
|
||||
<span className="fa fa-external-link"/>
|
||||
</span>
|
||||
)
|
||||
}
|
||||
return node
|
||||
}
|
||||
|
||||
class Manifest extends React.Component {
|
||||
static propTypes = {
|
||||
@@ -64,7 +31,24 @@ class Manifest extends React.Component {
|
||||
render() {
|
||||
const { tenant, build } = this.props
|
||||
|
||||
const nodes = build.manifest.tree.map(n => renderTree(tenant, build, '/', n))
|
||||
const nodes = build.manifest.tree.map(
|
||||
n => renderTree(
|
||||
tenant, build, '/', n,
|
||||
(tenant, build, path, name, log_url, obj) => (
|
||||
<span>
|
||||
<Link
|
||||
to={tenant.linkPrefix + '/build/' + build.uuid + '/log' + path + name}>
|
||||
{obj.name}
|
||||
</Link>
|
||||
(<a href={log_url + path + name}>raw</a>
|
||||
<span className="fa fa-external-link"/>)
|
||||
</span>),
|
||||
(log_url, path, name, obj) => (
|
||||
<span>
|
||||
<a href={log_url + path + name}>{obj.name}</a>
|
||||
<span className="fa fa-external-link"/>
|
||||
</span>
|
||||
)))
|
||||
|
||||
return (
|
||||
<React.Fragment>
|
||||
|
||||
Reference in New Issue
Block a user