Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
sundowndev
GitHub Repository: sundowndev/phoneinfoga
Path: blob/master/lib/output/console_test.go
994 views
1
package output
2
3
import (
4
"bytes"
5
"errors"
6
"github.com/stretchr/testify/assert"
7
"github.com/sundowndev/phoneinfoga/v2/lib/remote"
8
"github.com/sundowndev/phoneinfoga/v2/test/goldenfile"
9
"os"
10
"testing"
11
)
12
13
func TestConsoleOutput(t *testing.T) {
14
type FakeScannerResponse struct {
15
Format string `console:"Number Format"`
16
}
17
18
type FakeScannerResponseRecursive2 struct {
19
Response struct {
20
Format FakeScannerResponse `console:"Format"`
21
} `console:"Response"`
22
}
23
24
testcases := []struct {
25
name string
26
dirName string
27
result map[string]interface{}
28
errs map[string]error
29
wantErr error
30
}{
31
{
32
name: "should produce empty output",
33
dirName: "testdata/console_empty.txt",
34
result: map[string]interface{}{},
35
errs: map[string]error{},
36
},
37
{
38
name: "should produce valid output",
39
dirName: "testdata/console_valid.txt",
40
result: map[string]interface{}{
41
"numverify": remote.NumverifyScannerResponse{
42
Valid: true,
43
Number: "test",
44
LocalFormat: "test",
45
InternationalFormat: "test",
46
CountryPrefix: "test",
47
CountryCode: "test",
48
CountryName: "test",
49
Location: "test",
50
Carrier: "test",
51
LineType: "test",
52
},
53
},
54
errs: map[string]error{},
55
},
56
{
57
name: "should produce valid output with errors",
58
dirName: "testdata/console_valid_with_errors.txt",
59
result: map[string]interface{}{
60
"testscanner": nil,
61
"numverify": remote.NumverifyScannerResponse{
62
Valid: true,
63
Number: "test",
64
LocalFormat: "test",
65
InternationalFormat: "test",
66
CountryPrefix: "test",
67
CountryCode: "test",
68
CountryName: "test",
69
Location: "test",
70
Carrier: "test",
71
LineType: "test",
72
},
73
"testscanner2": FakeScannerResponse{
74
Format: "test",
75
},
76
},
77
errs: map[string]error{
78
"googlesearch": errors.New("dummy error"),
79
"fakescanner": errors.New("dummy error 2"),
80
},
81
},
82
{
83
name: "should follow recursive paths",
84
dirName: "testdata/console_valid_recursive.txt",
85
result: map[string]interface{}{
86
"testscanner": remote.GoogleSearchResponse{
87
SocialMedia: []*remote.GoogleSearchDork{
88
{
89
URL: "http://example.com?q=111-555-1212",
90
Number: "111-555-1212",
91
Dork: "intext:\"111-555-1212\"",
92
},
93
{
94
URL: "http://example.com?q=222-666-2323",
95
Number: "222-666-2323",
96
Dork: "intext:\"222-666-2323\"",
97
},
98
},
99
},
100
"testscanner2": FakeScannerResponseRecursive2{
101
Response: struct {
102
Format FakeScannerResponse `console:"Format"`
103
}{Format: FakeScannerResponse{Format: "test"}},
104
},
105
},
106
errs: map[string]error{},
107
},
108
}
109
110
for _, tt := range testcases {
111
t.Run(tt.name, func(t *testing.T) {
112
shouldUpdate := tt.dirName == *goldenfile.Update
113
114
expected, err := os.ReadFile(tt.dirName)
115
if err != nil && !shouldUpdate {
116
t.Fatal(err)
117
}
118
119
got := new(bytes.Buffer)
120
err = GetOutput(Console, got).Write(tt.result, tt.errs)
121
if tt.wantErr != nil {
122
assert.EqualError(t, err, tt.wantErr.Error())
123
} else {
124
assert.Nil(t, err)
125
}
126
127
if shouldUpdate {
128
err = os.WriteFile(tt.dirName, got.Bytes(), 0644)
129
if err != nil {
130
t.Fatal(err)
131
}
132
expected, err = os.ReadFile(tt.dirName)
133
if err != nil {
134
t.Fatal(err)
135
}
136
}
137
138
assert.Equal(t, string(expected), got.String())
139
})
140
}
141
}
142
143