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}