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  }