data_faking/data/api/stripe/
card.rs1use crate::utils::seeder;
2use wasm_bindgen::prelude::wasm_bindgen;
3use std::collections::HashMap;
4
5#[derive(Debug)]
6pub struct CardData {
7	pub vendor: String,
8	pub number: String,
9}
10
11#[derive(Debug)]
12pub struct TokenData {
13	pub vendor: String,
14	pub name: String,
15}
16
17#[derive(Debug)]
18pub struct InvalidCardData {
19	pub error: String,
20	pub number: String,
21}
22
23lazy_static! {
24	static ref VALID_CARDS_HASHMAP: HashMap<&'static str, String> = {
25		let mut card_map = HashMap::new();
26		card_map.insert("visa", "4242424242424242".to_owned());
27		card_map.insert("mc", "5555555555554444".to_owned());
28		card_map.insert("mc_2_series", "2223003122003222".to_owned());
29		card_map.insert("mc_debit", "5200828282828210".to_owned());
30		card_map.insert("mc_prepaid", "5105105105105100".to_owned());
31		card_map.insert("amex", "378282246310005".to_owned());
32		card_map.insert("amex_2", "371449635398431".to_owned());
33		card_map.insert("discover", "6011111111111117".to_owned());
34		card_map.insert("discover_2", "6011000990139424".to_owned());
35		card_map.insert("diners_club", "3056930009020004".to_owned());
36		card_map.insert("diners_club_2", "36227206271667".to_owned());
37		card_map.insert("jcb", "3566002020360505".to_owned());
38		card_map
39	};
40	static ref VALID_TOKENS_HASHMAP: HashMap<&'static str, String> = {
41		let mut token_map = HashMap::new();
42		token_map.insert("visa", "tok_visa".to_owned());
43		token_map.insert("visa_debit", "tok_visa_debit".to_owned());
44		token_map.insert("mc", "tok_mastercard".to_owned());
45		token_map.insert("mc_debit", "tok_mastercard_debit".to_owned());
46		token_map.insert("mc_prepaid", "tok_mastercard_prepaid".to_owned());
47		token_map.insert("amex", "tok_amex".to_owned());
48		token_map.insert("discover", "tok_discover".to_owned());
49		token_map.insert("diners_club", "tok_diners".to_owned());
50		token_map.insert("jcb", "tok_jcb".to_owned());
51		token_map
52	};
53	static ref INVALID_CARDS_HASHMAP: HashMap<&'static str, String> = {
54		let mut invalid_cards_map = HashMap::new();
55		invalid_cards_map.insert("addressZipFail", "4000000000000010".to_owned());
56		invalid_cards_map.insert("addressFail", "4000000000000028".to_owned());
57		invalid_cards_map.insert("zipFail", "4000000000000036".to_owned());
58		invalid_cards_map.insert("addressZipUnavailable", "4000000000000044".to_owned());
59		invalid_cards_map.insert("cvcFail", "4000000000000101".to_owned());
60		invalid_cards_map.insert("customerChargeFail", "4000000000000341".to_owned());
61		invalid_cards_map.insert("successWithReview", "4000000000009235".to_owned());
62		invalid_cards_map.insert("declineCard", "4000000000000002".to_owned());
63		invalid_cards_map.insert("declineFraudulentCard", "4100000000000019".to_owned());
64		invalid_cards_map.insert("declineIncorrectCvc", "4000000000000127".to_owned());
65		invalid_cards_map.insert("declineExpired", "4000000000000069".to_owned());
66		invalid_cards_map.insert("declineProcessingError", "4000000000000119".to_owned());
67		invalid_cards_map.insert("declineIncorrectNumber", "4242424242424241".to_owned());
68		invalid_cards_map
69	};
70}
71static VALID_CARD_TYPES: [&'static str; 12] = [
72	"visa",
73	"mc",
74	"mc_2_series",
75	"mc_debit",
76	"mc_prepaid",
77	"amex",
78	"amex_2",
79	"discover",
80	"discover_2",
81	"diners_club",
82	"diners_club_2",
83	"jcb",
84];
85static VALID_CARD_TYPES_LEN: usize = VALID_CARD_TYPES.len();
86
87static VALID_TOKEN_TYPES: [&'static str; 9] = [
88	"visa",
89	"visa_debit",
90	"mc",
91	"mc_debit",
92	"mc_prepaid",
93	"amex",
94	"discover",
95	"diners_club",
96	"jcb",
97];
98static VALID_TOKEN_TYPES_LEN: usize = VALID_TOKEN_TYPES.len();
99
100static INVALID_CARD_TYPES: [&'static str; 13] = [
101	"addressZipFail",
102	"addressFail",
103	"zipFail",
104	"addressZipUnavailable",
105	"cvcFail",
106	"customerChargeFail",
107	"successWithReview",
108	"declineCard",
109	"declineFraudulentCard",
110	"declineIncorrectCvc",
111	"declineExpired",
112	"declineProcessingError",
113	"declineIncorrectNumber",
114];
115static INVALID_CARD_TYPES_LEN: usize = INVALID_CARD_TYPES.len();
116
117pub fn valid_card() -> CardData {
118	let card_type = VALID_CARD_TYPES[seeder::gen_range(0..VALID_CARD_TYPES_LEN)].to_string();
119	let card = VALID_CARDS_HASHMAP.get(card_type.as_str()).unwrap();
120
121	CardData {
122		vendor: card_type,
123		number: card.to_owned(),
124	}
125}
126
127#[wasm_bindgen]
128pub fn valid_card_vendor() -> String {
129	valid_card().vendor
130}
131
132#[wasm_bindgen]
133pub fn valid_card_number() -> String {
134	valid_card().number
135}
136
137pub fn valid_token() -> TokenData {
138	let token_type = VALID_TOKEN_TYPES[seeder::gen_range(0..VALID_TOKEN_TYPES_LEN)].to_string();
139	let token = VALID_TOKENS_HASHMAP.get(token_type.as_str()).unwrap();
140
141	TokenData {
142		vendor: token_type,
143		name: token.to_owned(),
144	}
145}
146
147#[wasm_bindgen]
148pub fn valid_token_vendor() -> String {
149	valid_token().vendor
150}
151
152#[wasm_bindgen]
153pub fn valid_token_name() -> String {
154	valid_token().name
155}
156
157pub fn invalid_token() -> InvalidCardData {
158	let invalid_card_type =
159		INVALID_CARD_TYPES[seeder::gen_range(0..INVALID_CARD_TYPES_LEN)].to_string();
160	let number = INVALID_CARDS_HASHMAP
161		.get(invalid_card_type.as_str())
162		.unwrap();
163
164	InvalidCardData {
165		error: invalid_card_type,
166		number: number.to_owned(),
167	}
168}
169
170#[wasm_bindgen]
171pub fn invalid_token_error() -> String {
172	invalid_token().error
173}
174
175pub fn invalid_token_number() -> String {
176	invalid_token().number
177}