Skip to content

Commit 0b292cb

Browse files
committed
add workflow publish_run_and_view
1 parent b1c7894 commit 0b292cb

File tree

6 files changed

+96
-2
lines changed

6 files changed

+96
-2
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
node_modules
22
dist
3+
build

packages/forklift/src/harness.ts

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ export function runCommand(
3232
): any {
3333
const result = spawnSync(command, args, {
3434
cwd: options.cwd,
35-
shell: true, // enables running shell commands like `ls -la`
35+
shell: false,
3636
encoding: "utf8",
3737
env: {
3838
PATH: cleanPath,
@@ -365,6 +365,23 @@ class TestHarness {
365365
);
366366
}
367367
}
368+
369+
getAccountAddress(profile: string): string {
370+
const res = runCommand(APTOS_BINARY, ["config", "show-profiles"], {
371+
cwd: this.tempDir,
372+
});
373+
374+
if (!res || !res.Result || !res.Result[profile]) {
375+
throw new Error(`Profile ${profile} not found`);
376+
}
377+
378+
// Return the account address with 0x prefix if missing
379+
let addr = res.Result[profile].account;
380+
if (!addr.startsWith("0x")) {
381+
addr = "0x" + addr;
382+
}
383+
return addr;
384+
}
368385
}
369386

370387
export { TestHarness, type TestHarnessOptions, type MoveRunOptions, type ViewOptions, type PublishOptions };
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
[package]
2+
name = "SimpleMessage"
3+
version = "0.0.1"
4+
5+
[dependencies]
6+
AptosStdlib = { git = "https://github.com/aptos-labs/aptos-framework.git", subdir = "aptos-stdlib", rev = "mainnet" }
7+
8+
[addresses]
9+
simple_message = "_"
10+
std = "0x1"
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
module simple_message::message {
2+
use std::string::{String, utf8};
3+
use std::signer;
4+
use std::error;
5+
6+
struct MessageHolder has key {
7+
message: String,
8+
}
9+
10+
public entry fun set_message(account: &signer, message_bytes: vector<u8>) acquires MessageHolder {
11+
let message = utf8(message_bytes);
12+
let account_addr = signer::address_of(account);
13+
if (!exists<MessageHolder>(account_addr)) {
14+
move_to(account, MessageHolder { message });
15+
} else {
16+
let old_message_holder = borrow_global_mut<MessageHolder>(account_addr);
17+
old_message_holder.message = message;
18+
}
19+
}
20+
21+
#[view]
22+
public fun get_message(addr: address): String acquires MessageHolder {
23+
assert!(exists<MessageHolder>(addr), error::not_found(0));
24+
borrow_global<MessageHolder>(addr).message
25+
}
26+
}

packages/sample-project/src/tests/sample_workflow.ts renamed to packages/sample-project/src/tests/fund_transfer_and_view_seq_num.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { TestHarness, assertTxnSuccess } from "forklift";
22

3-
describe("Sample Workflow", () => {
3+
describe("fund, transfer, and view sequence number", () => {
44
let harness: TestHarness = new TestHarness();
55

66
afterAll(() => {
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
import { TestHarness, assertTxnSuccess } from "forklift";
2+
import * as path from "path";
3+
4+
describe("publish, set message, and view message", () => {
5+
let harness: TestHarness = new TestHarness();
6+
7+
afterAll(() => {
8+
harness.cleanup();
9+
});
10+
11+
it("publish package", () => {
12+
const packageDir = path.join(__dirname, "../../move_packages/message");
13+
const publishRes = harness.publishPackage({
14+
profile: "default",
15+
packageDir,
16+
namedAddresses: {
17+
simple_message: "default",
18+
},
19+
});
20+
assertTxnSuccess(publishRes)
21+
});
22+
23+
const message = "Hello, Aptos!";
24+
it("set message", () => {
25+
const runRes = harness.runMoveFunction({
26+
profile: "default",
27+
functionId: `default::message::set_message`,
28+
args: [`string:${message}`],
29+
});
30+
assertTxnSuccess(runRes);
31+
});
32+
33+
it("view message", () => {
34+
const viewRes = harness.runViewFunction({
35+
functionId: `default::message::get_message`,
36+
args: [`address:default`],
37+
});
38+
expect(viewRes.Result[0]).toBe(message);
39+
});
40+
});

0 commit comments

Comments
 (0)