Skip to content

Commit

Permalink
feat: building test cases for create records on ownership registry
Browse files Browse the repository at this point in the history
  • Loading branch information
HinsonSIDAN committed Nov 28, 2023
1 parent cd88d15 commit 8fdd397
Show file tree
Hide file tree
Showing 2 changed files with 106 additions and 55 deletions.
17 changes: 11 additions & 6 deletions lib/aiken-content-ownership/validators/ownership_registry.ak
Original file line number Diff line number Diff line change
Expand Up @@ -23,15 +23,20 @@ pub fn ownership_registry_logic(
expect InlineDatum(inline_datum) = oracle_ref_utxo.output.datum
expect OracleDatum { content_registry_address, .. }: OracleDatum =
inline_datum
expect [content_input] = inputs_at(inputs, content_registry_address)
expect Some(raw_redeemer) =
dict.get(redeemers, Spend(content_input.output_reference))
expect parsed_redeemer: ContentRegistryRedeemer = raw_redeemer
when parsed_redeemer is {
CreateContent { content_hash: _, owner: _ } -> True
when inputs_at(inputs, content_registry_address) is {
[content_input] -> {
expect Some(raw_redeemer) =
dict.get(redeemers, Spend(content_input.output_reference))
expect parsed_redeemer: ContentRegistryRedeemer = raw_redeemer
when parsed_redeemer is {
CreateContent { content_hash: _, owner: _ } -> True
_ -> False
}
}
_ -> False
}
}

_ -> False
}
}
144 changes: 95 additions & 49 deletions validators/tests/unit-tests/ownership_registry.ak
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
use aiken/dict.{Dict}
use aiken/int
use aiken/list
use aiken/transaction.{
Input, Output, ScriptContext, Spend, Transaction, placeholder,
}
Expand Down Expand Up @@ -53,34 +54,64 @@ fn make_mock_tx_body(
ownership_redeemer,
compare_output_reference,
)
|> dict.insert(
Spend(mock_utxo_ref(1)),
content_redeemer,
compare_output_reference,
)
|> if test_case.has_input_from_content_registry {
dict.insert(
_,
Spend(mock_utxo_ref(1)),
content_redeemer,
compare_output_reference,
)
} else {
fn(x) { x }
}

Transaction {
..placeholder(),
reference_inputs: [
Input {
output_reference: mock_utxo_ref(0),
output: mock_oracle_output(mock_oracle_datum()),
},
],
inputs: [
Input {
output_reference: mock_utxo_ref(1),
output: Output {
let content_input =
if test_case.has_input_from_content_registry {
[
Input {
output_reference: mock_utxo_ref(1),
output: Output {
..mock_content_registry_output(
0,
ContentRegistryDatum {
count: record_count,
registry: content_registry,
},
),
value: content_registry_value,
},
},
]
} else {
[]
}

let content_output =
if test_case.has_input_from_content_registry {
[
Output {
..mock_content_registry_output(
0,
ContentRegistryDatum {
count: record_count,
registry: content_registry,
count: record_count + 1,
registry: dict.insert(
content_registry,
record_count,
content_hash,
int.compare,
),
},
),
value: content_registry_value,
},
},
]
} else {
[]
}

let inputs =
list.push(
content_input,
Input {
output_reference: mock_utxo_ref(2),
output: Output {
Expand All @@ -94,23 +125,10 @@ fn make_mock_tx_body(
value: ownership_registry_value,
},
},
],
outputs: [
Output {
..mock_content_registry_output(
0,
ContentRegistryDatum {
count: record_count + 1,
registry: dict.insert(
content_registry,
record_count,
content_hash,
int.compare,
),
},
),
value: content_registry_value,
},
)
let outputs =
list.push(
content_output,
Output {
..mock_ownership_registry_output(
0,
Expand All @@ -126,28 +144,56 @@ fn make_mock_tx_body(
),
value: ownership_registry_value,
},
)

Transaction {
..placeholder(),
reference_inputs: [
Input {
output_reference: mock_utxo_ref(0),
output: mock_oracle_output(mock_oracle_datum()),
},
],
inputs: inputs,
outputs: outputs,
redeemers: redeemers,
}
}

test success_mint() {
fn base_case(test_case: TestCase) {
let redeemer = CreateOwnershipRecord
let dat = OwnershipRegistryDatum { count: 0, registry: dict.new() }
let content_hash = "QmWBaeu6y1zEcKbsEqCuhuDHPL3W8pZouCPdafMCRCSUWk"
let owner = (mock_policy_id_4(), "my_token_name")
let tx =
make_mock_tx_body(
0,
dict.new(),
dict.new(),
content_hash,
owner,
TestCase {
has_input_from_content_registry: True,
is_content_registry_redeemer_correct: True,
},
)
make_mock_tx_body(0, dict.new(), dict.new(), content_hash, owner, test_case)
let ctx = ScriptContext { purpose: Spend(mock_utxo_ref(2)), transaction: tx }
ownership_registry_logic(mock_policy_id(), dat, redeemer, ctx)
}

test success_create_ownership_record() {
base_case(
TestCase {
has_input_from_content_registry: True,
is_content_registry_redeemer_correct: True,
},
)
}

test fail_create_ownership_record_without_content_input() {
!base_case(
TestCase {
has_input_from_content_registry: False,
is_content_registry_redeemer_correct: True,
},
)
}

test fail_create_ownership_record_with_incorrect_redeemer() {
!base_case(
TestCase {
has_input_from_content_registry: True,
is_content_registry_redeemer_correct: False,
},
)
}

0 comments on commit 8fdd397

Please sign in to comment.