github.com/cryptohub-digital/blockbook-fork@v0.0.0-20230713133354-673c927af7f1/server/html_templates_test.go (about) 1 //go:build unittest 2 3 package server 4 5 import ( 6 "html/template" 7 "reflect" 8 "strings" 9 "testing" 10 "time" 11 ) 12 13 func Test_formatInt64(t *testing.T) { 14 tests := []struct { 15 name string 16 n int64 17 want template.HTML 18 }{ 19 {"1", 1, "1"}, 20 {"13", 13, "13"}, 21 {"123", 123, "123"}, 22 {"1234", 1234, `1<span class="ns">234</span>`}, 23 {"91234", 91234, `91<span class="ns">234</span>`}, 24 {"891234", 891234, `891<span class="ns">234</span>`}, 25 {"7891234", 7891234, `7<span class="ns">891</span><span class="ns">234</span>`}, 26 {"67891234", 67891234, `67<span class="ns">891</span><span class="ns">234</span>`}, 27 {"567891234", 567891234, `567<span class="ns">891</span><span class="ns">234</span>`}, 28 {"4567891234", 4567891234, `4<span class="ns">567</span><span class="ns">891</span><span class="ns">234</span>`}, 29 } 30 for _, tt := range tests { 31 t.Run(tt.name, func(t *testing.T) { 32 if got := formatInt64(tt.n); !reflect.DeepEqual(got, tt.want) { 33 t.Errorf("formatInt64() = %v, want %v", got, tt.want) 34 } 35 }) 36 } 37 } 38 39 func Test_formatTime(t *testing.T) { 40 timeNow = fixedTimeNow 41 tests := []struct { 42 name string 43 want template.HTML 44 }{ 45 { 46 name: "2020-12-23 15:16:17", 47 want: `<span tt="2020-12-23 15:16:17">630 days 21 hours ago</span>`, 48 }, 49 { 50 name: "2022-08-23 11:12:13", 51 want: `<span tt="2022-08-23 11:12:13">23 days 1 hour ago</span>`, 52 }, 53 { 54 name: "2022-09-14 11:12:13", 55 want: `<span tt="2022-09-14 11:12:13">1 day 1 hour ago</span>`, 56 }, 57 { 58 name: "2022-09-14 14:12:13", 59 want: `<span tt="2022-09-14 14:12:13">22 hours 31 mins ago</span>`, 60 }, 61 { 62 name: "2022-09-15 09:33:26", 63 want: `<span tt="2022-09-15 09:33:26">3 hours 10 mins ago</span>`, 64 }, 65 { 66 name: "2022-09-15 12:23:56", 67 want: `<span tt="2022-09-15 12:23:56">20 mins ago</span>`, 68 }, 69 { 70 name: "2022-09-15 12:24:07", 71 want: `<span tt="2022-09-15 12:24:07">19 mins ago</span>`, 72 }, 73 { 74 name: "2022-09-15 12:43:21", 75 want: `<span tt="2022-09-15 12:43:21">35 secs ago</span>`, 76 }, 77 { 78 name: "2022-09-15 12:43:56", 79 want: `<span tt="2022-09-15 12:43:56">0 secs ago</span>`, 80 }, 81 { 82 name: "2022-09-16 12:43:56", 83 want: `2022-09-16 12:43:56`, 84 }, 85 } 86 for _, tt := range tests { 87 t.Run(tt.name, func(t *testing.T) { 88 tm, _ := time.Parse("2006-01-02 15:04:05", tt.name) 89 if got := timeSpan(&tm); !reflect.DeepEqual(got, tt.want) { 90 t.Errorf("formatTime() = %v, want %v", got, tt.want) 91 } 92 }) 93 } 94 } 95 96 func Test_appendAmountSpan(t *testing.T) { 97 tests := []struct { 98 name string 99 class string 100 amount string 101 shortcut string 102 txDate string 103 want string 104 }{ 105 { 106 name: "prim-amt 1.23456789 BTC", 107 class: "prim-amt", 108 amount: "1.23456789", 109 shortcut: "BTC", 110 want: `<span class="prim-amt">1.<span class="amt-dec">234<span class="ns">567</span><span class="ns">89</span></span> BTC</span>`, 111 }, 112 { 113 name: "prim-amt 1432134.23456 BTC", 114 class: "prim-amt", 115 amount: "1432134.23456", 116 shortcut: "BTC", 117 want: `<span class="prim-amt">1<span class="nc">432</span><span class="nc">134</span>.<span class="amt-dec">234<span class="ns">56</span></span> BTC</span>`, 118 }, 119 { 120 name: "sec-amt 1 EUR", 121 class: "sec-amt", 122 amount: "1", 123 shortcut: "EUR", 124 want: `<span class="sec-amt">1 EUR</span>`, 125 }, 126 { 127 name: "sec-amt -1 EUR", 128 class: "sec-amt", 129 amount: "-1", 130 shortcut: "EUR", 131 want: `<span class="sec-amt">-1 EUR</span>`, 132 }, 133 { 134 name: "sec-amt 432109.23 EUR", 135 class: "sec-amt", 136 amount: "432109.23", 137 shortcut: "EUR", 138 want: `<span class="sec-amt">432<span class="nc">109</span>.<span class="amt-dec">23</span> EUR</span>`, 139 }, 140 { 141 name: "sec-amt -432109.23 EUR", 142 class: "sec-amt", 143 amount: "-432109.23", 144 shortcut: "EUR", 145 want: `<span class="sec-amt">-432<span class="nc">109</span>.<span class="amt-dec">23</span> EUR</span>`, 146 }, 147 { 148 name: "sec-amt 43141.29 EUR", 149 class: "sec-amt", 150 amount: "43141.29", 151 shortcut: "EUR", 152 txDate: "2022-03-14", 153 want: `<span class="sec-amt" tm="2022-03-14">43<span class="nc">141</span>.<span class="amt-dec">29</span> EUR</span>`, 154 }, 155 { 156 name: "sec-amt -43141.29 EUR", 157 class: "sec-amt", 158 amount: "-43141.29", 159 shortcut: "EUR", 160 txDate: "2022-03-14", 161 want: `<span class="sec-amt" tm="2022-03-14">-43<span class="nc">141</span>.<span class="amt-dec">29</span> EUR</span>`, 162 }, 163 } 164 for _, tt := range tests { 165 t.Run(tt.name, func(t *testing.T) { 166 var rv strings.Builder 167 appendAmountSpan(&rv, tt.class, tt.amount, tt.shortcut, tt.txDate) 168 if got := rv.String(); !reflect.DeepEqual(got, tt.want) { 169 t.Errorf("appendAmountSpan() = %v, want %v", got, tt.want) 170 } 171 }) 172 } 173 } 174 175 func Test_appendAmountSpanBitcoinType(t *testing.T) { 176 tests := []struct { 177 name string 178 class string 179 amount string 180 shortcut string 181 txDate string 182 want string 183 }{ 184 { 185 name: "prim-amt 1.23456789 BTC", 186 class: "prim-amt", 187 amount: "1.23456789", 188 shortcut: "BTC", 189 want: `<span class="prim-amt">1.<span class="amt-dec">23<span class="ns">456</span><span class="ns">789</span></span> BTC</span>`, 190 }, 191 { 192 name: "prim-amt 1432134.23456 BTC", 193 class: "prim-amt", 194 amount: "1432134.23456", 195 shortcut: "BTC", 196 want: `<span class="prim-amt">1<span class="nc">432</span><span class="nc">134</span>.<span class="amt-dec">23<span class="ns">456</span><span class="ns">000</span></span> BTC</span>`, 197 }, 198 { 199 name: "prim-amt 1 BTC", 200 class: "prim-amt", 201 amount: "1", 202 shortcut: "BTC", 203 want: `<span class="prim-amt">1.<span class="amt-dec">00<span class="ns">000</span><span class="ns">000</span></span> BTC</span>`, 204 }, 205 { 206 name: "prim-amt 0 BTC", 207 class: "prim-amt", 208 amount: "0", 209 shortcut: "BTC", 210 want: `<span class="prim-amt">0 BTC</span>`, 211 }, 212 { 213 name: "prim-amt 34.2 BTC", 214 class: "prim-amt", 215 amount: "34.2", 216 shortcut: "BTC", 217 want: `<span class="prim-amt">34.<span class="amt-dec">20<span class="ns">000</span><span class="ns">000</span></span> BTC</span>`, 218 }, 219 { 220 name: "prim-amt -34.2345678 BTC", 221 class: "prim-amt", 222 amount: "-34.2345678", 223 shortcut: "BTC", 224 want: `<span class="prim-amt">-34.<span class="amt-dec">23<span class="ns">456</span><span class="ns">780</span></span> BTC</span>`, 225 }, 226 { 227 name: "prim-amt -1234.2345 BTC", 228 class: "prim-amt", 229 amount: "-1234.2345", 230 shortcut: "BTC", 231 want: `<span class="prim-amt">-1<span class="nc">234</span>.<span class="amt-dec">23<span class="ns">450</span><span class="ns">000</span></span> BTC</span>`, 232 }, 233 { 234 name: "prim-amt -123.23 BTC", 235 class: "prim-amt", 236 amount: "-123.23", 237 shortcut: "BTC", 238 want: `<span class="prim-amt">-123.<span class="amt-dec">23<span class="ns">000</span><span class="ns">000</span></span> BTC</span>`, 239 }, 240 } 241 for _, tt := range tests { 242 t.Run(tt.name, func(t *testing.T) { 243 var rv strings.Builder 244 appendAmountSpanBitcoinType(&rv, tt.class, tt.amount, tt.shortcut, tt.txDate) 245 if got := rv.String(); !reflect.DeepEqual(got, tt.want) { 246 t.Errorf("appendAmountSpanBitcoinType() = %v, want %v", got, tt.want) 247 } 248 }) 249 } 250 }