Skip to content

Commit f09b95e

Browse files
authored
Merge pull request #337 from Georgechisom/fix-244-contract-implement-common-types-module
Fix: [CONTRACT] Implement Common Types Module
2 parents 8f53800 + 7c2118c commit f09b95e

File tree

5 files changed

+170
-11
lines changed

5 files changed

+170
-11
lines changed

contracts/assetsup/src/lib.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ pub(crate) mod asset;
55
pub(crate) mod errors;
66
pub(crate) mod types;
77

8+
pub use types::*;
9+
810
#[contracttype]
911
#[derive(Clone, Debug, Eq, PartialEq)]
1012
pub enum DataKey {

contracts/assetsup/src/tests/asset.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ fn test_register_and_get_asset_success() {
3434
let asset = Asset {
3535
id: id.clone(),
3636
name: name.clone(),
37-
asset_type: AssetType::IT,
37+
asset_type: AssetType::Digital,
3838
category: category.clone(),
3939
branch_id: 10,
4040
department_id: 20,
@@ -54,7 +54,7 @@ fn test_register_and_get_asset_success() {
5454

5555
assert_eq!(got.id, id);
5656
assert_eq!(got.name, name);
57-
assert_eq!(got.asset_type, AssetType::IT);
57+
assert_eq!(got.asset_type, AssetType::Digital);
5858
assert_eq!(got.category, category);
5959
assert_eq!(got.branch_id, 10);
6060
assert_eq!(got.department_id, 20);
@@ -82,7 +82,7 @@ fn test_register_asset_duplicate() {
8282
let asset = Asset {
8383
id: id.clone(),
8484
name: name.clone(),
85-
asset_type: AssetType::Furniture,
85+
asset_type: AssetType::Physical,
8686
category: category.clone(),
8787
branch_id: 1,
8888
department_id: 2,
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
mod asset;
22
mod initialize;
3+
mod types;
Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
#![cfg(test)]
2+
3+
use crate::types::*;
4+
5+
#[test]
6+
fn test_asset_type_variants() {
7+
// Test that all AssetType variants can be created
8+
let physical = AssetType::Physical;
9+
let digital = AssetType::Digital;
10+
11+
// Test equality
12+
assert_eq!(physical, AssetType::Physical);
13+
assert_eq!(digital, AssetType::Digital);
14+
assert_ne!(physical, digital);
15+
16+
// Test cloning
17+
let physical_clone = physical.clone();
18+
assert_eq!(physical, physical_clone);
19+
}
20+
21+
#[test]
22+
fn test_asset_status_variants() {
23+
// Test that all AssetStatus variants can be created
24+
let active = AssetStatus::Active;
25+
let in_maintenance = AssetStatus::InMaintenance;
26+
let disposed = AssetStatus::Disposed;
27+
28+
// Test equality
29+
assert_eq!(active, AssetStatus::Active);
30+
assert_eq!(in_maintenance, AssetStatus::InMaintenance);
31+
assert_eq!(disposed, AssetStatus::Disposed);
32+
33+
// Test that they are different
34+
assert_ne!(active, in_maintenance);
35+
assert_ne!(active, disposed);
36+
assert_ne!(in_maintenance, disposed);
37+
}
38+
39+
#[test]
40+
fn test_action_type_variants() {
41+
// Test that all ActionType variants can be created
42+
let procured = ActionType::Procured;
43+
let transferred = ActionType::Transferred;
44+
let maintained = ActionType::Maintained;
45+
let disposed = ActionType::Disposed;
46+
let checked_in = ActionType::CheckedIn;
47+
let checked_out = ActionType::CheckedOut;
48+
49+
// Test equality
50+
assert_eq!(procured, ActionType::Procured);
51+
assert_eq!(transferred, ActionType::Transferred);
52+
assert_eq!(maintained, ActionType::Maintained);
53+
assert_eq!(disposed, ActionType::Disposed);
54+
assert_eq!(checked_in, ActionType::CheckedIn);
55+
assert_eq!(checked_out, ActionType::CheckedOut);
56+
57+
// Test that they are different
58+
assert_ne!(procured, transferred);
59+
assert_ne!(checked_in, checked_out);
60+
}
61+
62+
#[test]
63+
fn test_plan_type_variants() {
64+
// Test that all PlanType variants can be created
65+
let basic = PlanType::Basic;
66+
let pro = PlanType::Pro;
67+
let enterprise = PlanType::Enterprise;
68+
69+
// Test equality
70+
assert_eq!(basic, PlanType::Basic);
71+
assert_eq!(pro, PlanType::Pro);
72+
assert_eq!(enterprise, PlanType::Enterprise);
73+
74+
// Test that they are different
75+
assert_ne!(basic, pro);
76+
assert_ne!(pro, enterprise);
77+
assert_ne!(basic, enterprise);
78+
}
79+
80+
#[test]
81+
fn test_subscription_status_variants() {
82+
// Test that all SubscriptionStatus variants can be created
83+
let active = SubscriptionStatus::Active;
84+
let expired = SubscriptionStatus::Expired;
85+
let cancelled = SubscriptionStatus::Cancelled;
86+
87+
// Test equality
88+
assert_eq!(active, SubscriptionStatus::Active);
89+
assert_eq!(expired, SubscriptionStatus::Expired);
90+
assert_eq!(cancelled, SubscriptionStatus::Cancelled);
91+
92+
// Test that they are different
93+
assert_ne!(active, expired);
94+
assert_ne!(active, cancelled);
95+
assert_ne!(expired, cancelled);
96+
}
97+
98+
#[test]
99+
fn test_types_can_be_used_in_functions() {
100+
// Test that types can be used as function parameters and return values
101+
fn get_asset_type() -> AssetType {
102+
AssetType::Physical
103+
}
104+
105+
fn process_action(action: ActionType) -> bool {
106+
match action {
107+
ActionType::Procured => true,
108+
ActionType::Transferred => true,
109+
ActionType::Maintained => true,
110+
ActionType::Disposed => false,
111+
ActionType::CheckedIn => true,
112+
ActionType::CheckedOut => true,
113+
}
114+
}
115+
116+
let asset_type = get_asset_type();
117+
assert_eq!(asset_type, AssetType::Physical);
118+
119+
let result = process_action(ActionType::Procured);
120+
assert!(result);
121+
122+
let result = process_action(ActionType::Disposed);
123+
assert!(!result);
124+
}

contracts/assetsup/src/types.rs

Lines changed: 40 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,54 @@
11
#![allow(clippy::upper_case_acronyms)]
22
use soroban_sdk::contracttype;
33

4+
/// Represents the fundamental type of asset being managed
5+
/// Distinguishes between physical and digital assets for different handling requirements
46
#[contracttype]
57
#[derive(Clone, Debug, Eq, PartialEq)]
68
pub enum AssetType {
7-
IT,
8-
Furniture,
9-
Vehicle,
10-
RealEstate,
11-
Machinery,
12-
Other,
9+
Physical,
10+
Digital,
1311
}
1412

13+
/// Represents the current operational status of an asset
14+
/// Used to track asset lifecycle and availability for use
1515
#[contracttype]
1616
#[derive(Clone, Debug, Eq, PartialEq)]
1717
pub enum AssetStatus {
1818
Active,
19-
Maintenance,
20-
Retired,
19+
InMaintenance,
2120
Disposed,
2221
}
22+
23+
/// Represents different types of actions that can be performed on assets
24+
/// Used for audit trails and tracking asset lifecycle events
25+
#[contracttype]
26+
#[derive(Clone, Debug, Eq, PartialEq)]
27+
pub enum ActionType {
28+
Procured,
29+
Transferred,
30+
Maintained,
31+
Disposed,
32+
CheckedIn,
33+
CheckedOut,
34+
}
35+
36+
/// Represents different subscription plan tiers
37+
/// Used to determine feature access and usage limits
38+
#[contracttype]
39+
#[derive(Clone, Debug, Eq, PartialEq)]
40+
pub enum PlanType {
41+
Basic,
42+
Pro,
43+
Enterprise,
44+
}
45+
46+
/// Represents the current status of a subscription
47+
/// Used to control access to platform features
48+
#[contracttype]
49+
#[derive(Clone, Debug, Eq, PartialEq)]
50+
pub enum SubscriptionStatus {
51+
Active,
52+
Expired,
53+
Cancelled,
54+
}

0 commit comments

Comments
 (0)