Skip to content

Commit

Permalink
Adding new lock helper to provide accompanying transaction and confir…
Browse files Browse the repository at this point in the history
…mations (#253)

* Adding new lock helper to provide accompanying transaction and confirmations

* Linting fixes

* Fixing tests
  • Loading branch information
benwerd committed Sep 19, 2018
1 parent 4b90766 commit 56c556b
Show file tree
Hide file tree
Showing 4 changed files with 142 additions and 2 deletions.
104 changes: 104 additions & 0 deletions unlock-app/src/__tests__/helpers/Locks.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
import { getLockTransaction, getLockConfirmations } from '../../helpers/Locks'

describe('lockHelpers', () => {
it ('should retrieve a transaction from a lock when a match exists', () => {
const Lock = {
address: '0x1234567890',
}
const transactions = {
all: {
notTheTransactionWereLookingFor: {
hash: 'notTheTransactionWereLookingFor',
confirmations: 24,
lock: {
address: '0x0987654321',
},
},
theTransactionWereLookingFor: {
hash: 'theTransactionWereLookingFor',
confirmations: 12,
lock: {
address: '0x1234567890',
},
},
},
}

expect(getLockTransaction(transactions, Lock.address).hash).toEqual('theTransactionWereLookingFor')
})
it ('should not retrieve a transaction from a lock when no match exists', () => {
const Lock = {
address: '0x9999999999',
}
const transactions = {
all: {
notTheTransactionWereLookingFor: {
hash: 'notTheTransactionWereLookingFor',
confirmations: 24,
lock: {
address: '0x0987654321',
},
},
theTransactionWereLookingFor: {
hash: 'theTransactionWereLookingFor',
confirmations: 12,
lock: {
address: '0x1234567890',
},
},
},
}

expect(getLockTransaction(transactions, Lock.address)).toEqual(null)
})
it ('should retrieve confirmations from a lock when a match exists', () => {
const Lock = {
address: '0x1234567890',
}
const transactions = {
all: {
notTheTransactionWereLookingFor: {
hash: 'notTheTransactionWereLookingFor',
confirmations: 24,
lock: {
address: '0x0987654321',
},
},
theTransactionWereLookingFor: {
hash: 'theTransactionWereLookingFor',
confirmations: 12,
lock: {
address: '0x1234567890',
},
},
},
}

expect(getLockConfirmations(transactions, Lock.address)).toEqual(12)
})
it ('should retrieve no confirmations from a lock when no match exists', () => {
const Lock = {
address: '0x99999999999',
}
const transactions = {
all: {
notTheTransactionWereLookingFor: {
hash: 'notTheTransactionWereLookingFor',
confirmations: 24,
lock: {
address: '0x0987654321',
},
},
theTransactionWereLookingFor: {
hash: 'theTransactionWereLookingFor',
confirmations: 12,
lock: {
address: '0x1234567890',
},
},
},
}

expect(getLockConfirmations(transactions, Lock.address)).toEqual(null)
})
})
9 changes: 7 additions & 2 deletions unlock-app/src/components/creator/Locks.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,20 @@ import React from 'react'
import { connect } from 'react-redux'
import { Link } from 'react-router-dom'
import Icon from '../lock/Icon'
import {getLockConfirmations} from '../../helpers/Locks'

const LockInList = (props) => {
return (<li className="list-group-item">
<Icon lock={props.lock} address={props.lock.address} />
<Link to={`/creator/lock/${props.lock.address}`}>
{props.lock.address}
{props.lock.address} {getLockConfirmations(props.transactions, props.lock.address)}
</Link>
</li>)
}

LockInList.propTypes = {
lock: UnlockPropTypes.lock,
transactions: UnlockPropTypes.transactions,
}

const Locks = (props) => {
Expand All @@ -24,7 +26,7 @@ const Locks = (props) => {
<ul className="list-group">
{[...props.locks].map((lock, idx) => {
return (
<LockInList lock={lock} key={idx} />
<LockInList lock={lock} key={idx} transactions={props.transactions} />
)
})}
</ul>
Expand All @@ -34,12 +36,15 @@ const Locks = (props) => {

Locks.propTypes = {
locks: UnlockPropTypes.locks,
transactions: UnlockPropTypes.transactions,
}

const mapStateToProps = state => {
const locks = state.locks || []
const transactions = state.transactions || {}
return {
locks,
transactions,
}
}

Expand Down
28 changes: 28 additions & 0 deletions unlock-app/src/helpers/Locks.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
/**
* Given the address of a lock, returns its accompanying transaction
* @param transactionStore
* @param lockAddress
* @returns {object}
*/
export function getLockTransaction(transactionStore, lockAddress) {
if (transactionStore && transactionStore.all) {
for (let transaction in transactionStore.all) {
let transactionObject = transactionStore.all[transaction]
if (transactionObject.lock && transactionObject.lock.address === lockAddress)
return transactionObject
}
}
return null
}

/**
* Given the address of a lock, returns the number of confirmations it has received
* @param transactionStore
* @param lockAddress
* @returns {number}
*/
export function getLockConfirmations(transactionStore, lockAddress) {
let transaction = getLockTransaction(transactionStore, lockAddress)
if (transaction) return transaction.confirmations
return null
}
3 changes: 3 additions & 0 deletions unlock-app/src/propTypes.js
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,8 @@ export const layout = PropTypes.instanceOf(Function) //PropTypes.instanceOf(Reac

export const locks = PropTypes.arrayOf(lock)

export const transactions = PropTypes.shape({})

export const key = PropTypes.shape({})

export const network = PropTypes.shape({})
Expand All @@ -63,5 +65,6 @@ export default {
mechanism,
provider,
transaction,
transactions,
status,
}

0 comments on commit 56c556b

Please sign in to comment.