Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 31 additions & 0 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# Javascript Node CircleCI 2.0 configuration file
#
# Check https://circleci.com/docs/2.0/language-javascript/ for more details
#
version: 2
jobs:
build:
docker:
# specify the version you desire here
- image: circleci/node:7.10

# Specify service dependencies here if necessary
# CircleCI maintains a library of pre-built images
# documented at https://circleci.com/docs/2.0/circleci-images/
# - image: circleci/mongo:3.4.4

steps:
- checkout

- run: yarn install

- save_cache:
paths:
- node_modules
key: v1-dependencies-{{ checksum "package.json" }}

# run tests!
- run: yarn test

# upload coverage
- run: bash <(curl -s https://codecov.io/bash)
4 changes: 3 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,3 @@
# solidity-ci
[![CircleCI](https://circleci.com/gh/sumitis14/solidity-ci.svg?style=svg)](https://circleci.com/gh/sumitis14/solidity-ci) [![codecov](https://codecov.io/gh/sumitis14/solidity-ci/branch/master/graph/badge.svg)](https://codecov.io/gh/sumitis14/solidity-ci)

# solidity-ci test
8 changes: 8 additions & 0 deletions contracts/ConvertLib.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
pragma solidity ^0.4.4;

library ConvertLib{
function convert(uint amount,uint conversionRate) public pure returns (uint convertedAmount)
{
return amount * conversionRate;
}
}
34 changes: 34 additions & 0 deletions contracts/MetaCoin.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
pragma solidity ^0.4.18;

import "./ConvertLib.sol";

// This is just a simple example of a coin-like contract.
// It is not standards compatible and cannot be expected to talk to other
// coin/token contracts. If you want to create a standards-compliant
// token, see: https://github.com/ConsenSys/Tokens. Cheers!

contract MetaCoin {
mapping (address => uint) balances;

event Transfer(address indexed _from, address indexed _to, uint256 _value);

constructor() public {
balances[tx.origin] = 10000;
}

function sendCoin(address receiver, uint amount) public returns(bool sufficient) {
if (balances[msg.sender] < amount) return false;
balances[msg.sender] -= amount;
balances[receiver] += amount;
emit Transfer(msg.sender, receiver, amount);
return true;
}

function getBalanceInEth(address addr) public view returns(uint){
return ConvertLib.convert(getBalance(addr),2);
}

function getBalance(address addr) public view returns(uint) {
return balances[addr];
}
}
23 changes: 23 additions & 0 deletions contracts/Migrations.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
pragma solidity ^0.4.2;

contract Migrations {
address public owner;
uint public last_completed_migration;

modifier restricted() {
if (msg.sender == owner) _;
}

constructor() public {
owner = msg.sender;
}

function setCompleted(uint completed) public restricted {
last_completed_migration = completed;
}

function upgrade(address new_address) public restricted {
Migrations upgraded = Migrations(new_address);
upgraded.setCompleted(last_completed_migration);
}
}
1 change: 1 addition & 0 deletions coverage.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"contracts/ConvertLib.sol":{"l":{"6":1},"path":"/home/sumit101/workspace/solidity/metacoin/contracts/ConvertLib.sol","s":{"1":1},"b":{},"f":{"1":1},"fnMap":{"1":{"name":"convert","line":4,"loc":{"start":{"line":4,"column":1},"end":{"line":5,"column":2}}}},"statementMap":{"1":{"start":{"line":6,"column":2},"end":{"line":6,"column":32}}},"branchMap":{}},"contracts/MetaCoin.sol":{"l":{"16":2,"20":1,"21":1,"22":1,"23":1,"24":1,"28":1,"32":9},"path":"/home/sumit101/workspace/solidity/metacoin/contracts/MetaCoin.sol","s":{"1":2,"2":1,"3":0,"4":1,"5":1,"6":1,"7":1,"8":1,"9":9},"b":{"1":[0,1]},"f":{"1":2,"2":1,"3":1,"4":9},"fnMap":{"1":{"name":null,"line":15,"loc":{"start":{"line":15,"column":1},"end":{"line":15,"column":22}}},"2":{"name":"sendCoin","line":19,"loc":{"start":{"line":19,"column":1},"end":{"line":19,"column":82}}},"3":{"name":"getBalanceInEth","line":27,"loc":{"start":{"line":27,"column":1},"end":{"line":27,"column":65}}},"4":{"name":"getBalance","line":31,"loc":{"start":{"line":31,"column":1},"end":{"line":31,"column":61}}}},"statementMap":{"1":{"start":{"line":16,"column":2},"end":{"line":16,"column":28}},"2":{"start":{"line":20,"column":2},"end":{"line":20,"column":49}},"3":{"start":{"line":20,"column":37},"end":{"line":20,"column":49}},"4":{"start":{"line":21,"column":2},"end":{"line":21,"column":31}},"5":{"start":{"line":22,"column":2},"end":{"line":22,"column":29}},"6":{"start":{"line":23,"column":2},"end":{"line":23,"column":45}},"7":{"start":{"line":24,"column":2},"end":{"line":24,"column":13}},"8":{"start":{"line":28,"column":2},"end":{"line":28,"column":47}},"9":{"start":{"line":32,"column":2},"end":{"line":32,"column":23}}},"branchMap":{"1":{"line":20,"type":"if","locations":[{"start":{"line":20,"column":2},"end":{"line":20,"column":2}},{"start":{"line":20,"column":2},"end":{"line":20,"column":2}}]}}}}
5 changes: 5 additions & 0 deletions migrations/1_initial_migration.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
var Migrations = artifacts.require("./Migrations.sol");

module.exports = function(deployer) {
deployer.deploy(Migrations);
};
8 changes: 8 additions & 0 deletions migrations/2_deploy_contracts.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
var ConvertLib = artifacts.require("./ConvertLib.sol");
var MetaCoin = artifacts.require("./MetaCoin.sol");

module.exports = function(deployer) {
deployer.deploy(ConvertLib);
deployer.link(ConvertLib, MetaCoin);
deployer.deploy(MetaCoin);
};
21 changes: 21 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
{
"name": "test",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "solidity-coverage"
},
"repository": {
"type": "git",
"url": "git+https://github.com/QX-Lee/test.git"
},
"author": "",
"license": "ISC",
"dependencies": {
"truffle": "4.1.11"
},
"devDependencies": {
"solidity-coverage": "0.5"
}
}
1 change: 1 addition & 0 deletions solidity-ci/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# solidity-ci
25 changes: 25 additions & 0 deletions test/TestMetacoin.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
pragma solidity ^0.4.2;

import "truffle/Assert.sol";
import "truffle/DeployedAddresses.sol";
import "../contracts/MetaCoin.sol";

contract TestMetacoin {

function testInitialBalanceUsingDeployedContract() public {
MetaCoin meta = MetaCoin(DeployedAddresses.MetaCoin());

uint expected = 10000;

Assert.equal(meta.getBalance(tx.origin), expected, "Owner should have 10000 MetaCoin initially");
}

function testInitialBalanceWithNewMetaCoin() public {
MetaCoin meta = new MetaCoin();

uint expected = 10000;

Assert.equal(meta.getBalance(tx.origin), expected, "Owner should have 10000 MetaCoin initially");
}

}
63 changes: 63 additions & 0 deletions test/metacoin.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
var MetaCoin = artifacts.require("./MetaCoin.sol");

contract('MetaCoin', function(accounts) {
it("should put 10000 MetaCoin in the first account", function() {
return MetaCoin.deployed().then(function(instance) {
return instance.getBalance.call(accounts[0]);
}).then(function(balance) {
assert.equal(balance.valueOf(), 10000, "10000 wasn't in the first account");
});
});
it("should call a function that depends on a linked library", function() {
var meta;
var metaCoinBalance;
var metaCoinEthBalance;

return MetaCoin.deployed().then(function(instance) {
meta = instance;
return meta.getBalance.call(accounts[0]);
}).then(function(outCoinBalance) {
metaCoinBalance = outCoinBalance.toNumber();
return meta.getBalanceInEth.call(accounts[0]);
}).then(function(outCoinBalanceEth) {
metaCoinEthBalance = outCoinBalanceEth.toNumber();
}).then(function() {
assert.equal(metaCoinEthBalance, 2 * metaCoinBalance, "Library function returned unexpected function, linkage may be broken");
});
});
it("should send coin correctly", function() {
var meta;

// Get initial balances of first and second account.
var account_one = accounts[0];
var account_two = accounts[1];

var account_one_starting_balance;
var account_two_starting_balance;
var account_one_ending_balance;
var account_two_ending_balance;

var amount = 10;

return MetaCoin.deployed().then(function(instance) {
meta = instance;
return meta.getBalance.call(account_one);
}).then(function(balance) {
account_one_starting_balance = balance.toNumber();
return meta.getBalance.call(account_two);
}).then(function(balance) {
account_two_starting_balance = balance.toNumber();
return meta.sendCoin(account_two, amount, {from: account_one});
}).then(function() {
return meta.getBalance.call(account_one);
}).then(function(balance) {
account_one_ending_balance = balance.toNumber();
return meta.getBalance.call(account_two);
}).then(function(balance) {
account_two_ending_balance = balance.toNumber();

assert.equal(account_one_ending_balance, account_one_starting_balance - amount, "Amount wasn't correctly taken from the sender");
assert.equal(account_two_ending_balance, account_two_starting_balance + amount, "Amount wasn't correctly sent to the receiver");
});
});
});
4 changes: 4 additions & 0 deletions truffle-config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
module.exports = {
// See <http://truffleframework.com/docs/advanced/configuration>
// to customize your Truffle configuration!
};
4 changes: 4 additions & 0 deletions truffle.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
module.exports = {
// See <http://truffleframework.com/docs/advanced/configuration>
// to customize your Truffle configuration!
};
Loading