diff --git a/Makefile b/Makefile index 595af28..a2c3e87 100644 --- a/Makefile +++ b/Makefile @@ -63,6 +63,7 @@ lint: lint-full: golangci-lint run --enable-all --exclude-use-default --disable exhaustivestruct,exhaustruct,depguard,interfacer,deadcode,golint,structcheck,scopelint,varcheck,ifshort,maligned,nosnakecase,godot,funlen,gofumpt,cyclop,noctx,gochecknoglobals,paralleltest + gocritic check -enableAll *.go testfuzzy: clean go test -fuzz ./... $(ARGS) diff --git a/ad.go b/ad.go index d6b1c86..c9da0a6 100644 --- a/ad.go +++ b/ad.go @@ -73,7 +73,7 @@ func (ad *Ad) Incomplete() bool { } func (ad *Ad) CalculateExpire() { - if len(ad.Created) > 0 { + if ad.Created != "" { ts, err := time.Parse("02.01.2006", ad.Created) if err == nil { ad.Expire = ts.AddDate(0, ExpireMonths, ExpireDays).Format("02.01.2006") diff --git a/fetch.go b/fetch.go index c3fd281..bfdac24 100644 --- a/fetch.go +++ b/fetch.go @@ -52,7 +52,7 @@ func NewFetcher(conf *Config) (*Fetcher, error) { } func (f *Fetcher) Get(uri string) (io.ReadCloser, error) { - req, err := http.NewRequest(http.MethodGet, uri, nil) + req, err := http.NewRequest(http.MethodGet, uri, http.NoBody) if err != nil { return nil, fmt.Errorf("failed to create a new HTTP request obj: %w", err) } diff --git a/image.go b/image.go index 74fae87..7a19847 100644 --- a/image.go +++ b/image.go @@ -49,7 +49,7 @@ func (img *Image) LogValue() slog.Value { // holds all images of an ad type Cache []*goimagehash.ImageHash -func NewImage(buf *bytes.Reader, filename string, uri string) *Image { +func NewImage(buf *bytes.Reader, filename, uri string) *Image { img := &Image{ Filename: filename, URI: uri, @@ -134,7 +134,7 @@ func ReadImages(addir string, dont bool) (Cache, error) { reader := bytes.NewReader(data.Bytes()) img := NewImage(reader, filename, "") - if err = img.CalcHash(); err != nil { + if err := img.CalcHash(); err != nil { return nil, err } diff --git a/main_test.go b/main_test.go index 9c61081..e4bf77f 100644 --- a/main_test.go +++ b/main_test.go @@ -334,14 +334,14 @@ type Adsource struct { } // Render a HTML template for an adlisting or an ad -func GetTemplate(adconfigs []AdConfig, adconfig AdConfig, htmltemplate string) string { +func GetTemplate(adconfigs []AdConfig, adconfig *AdConfig, htmltemplate string) string { tmpl, err := tpl.New("template").Parse(htmltemplate) if err != nil { panic(err) } var out bytes.Buffer - if len(adconfig.ID) == 0 { + if adconfig.ID == "" { err = tmpl.Execute(&out, adconfigs) } else { err = tmpl.Execute(&out, adconfig) @@ -376,15 +376,15 @@ func InitValidSources() []Adsource { ads := []Adsource{ { uri: fmt.Sprintf("%s%s?userId=1", Baseuri, Listuri), - content: GetTemplate(list1, empty, LISTTPL), + content: GetTemplate(list1, &empty, LISTTPL), }, { uri: fmt.Sprintf("%s%s?userId=1&pageNum=2", Baseuri, Listuri), - content: GetTemplate(list2, empty, LISTTPL), + content: GetTemplate(list2, &empty, LISTTPL), }, { uri: fmt.Sprintf("%s%s?userId=1&pageNum=3", Baseuri, Listuri), - content: GetTemplate(list3, empty, LISTTPL), + content: GetTemplate(list3, &empty, LISTTPL), }, } @@ -392,7 +392,7 @@ func InitValidSources() []Adsource { for _, ad := range adsrc { ads = append(ads, Adsource{ uri: fmt.Sprintf("%s/s-anzeige/%s/%s", Baseuri, ad.Slug, ad.ID), - content: GetTemplate(nil, ad, ADTPL), + content: GetTemplate(nil, &ad, ADTPL), }) } @@ -405,28 +405,28 @@ func InitInvalidSources() []Adsource { { // valid ad page but without content uri: fmt.Sprintf("%s/s-anzeige/empty/1", Baseuri), - content: GetTemplate(nil, empty, EMPTYPAGE), + content: GetTemplate(nil, &empty, EMPTYPAGE), }, { // some random foreign webpage uri: INVALIDURI, - content: GetTemplate(nil, empty, "foo"), + content: GetTemplate(nil, &empty, "foo"), }, { // some invalid page path uri: fmt.Sprintf("%s/anzeige/name/1", Baseuri), - content: GetTemplate(nil, empty, ""), + content: GetTemplate(nil, &empty, ""), }, { // some none-ad page uri: fmt.Sprintf("%s/anzeige/name/1/foo/bar", Baseuri), - content: GetTemplate(nil, empty, "HTTP 404: /eine-anzeige/ does not exist!"), + content: GetTemplate(nil, &empty, "HTTP 404: /eine-anzeige/ does not exist!"), status: 404, }, { // valid ad page but 503 uri: fmt.Sprintf("%s/s-anzeige/503/1", Baseuri), - content: GetTemplate(nil, empty, "HTTP 503: service unavailable"), + content: GetTemplate(nil, &empty, "HTTP 503: service unavailable"), status: 503, }, } @@ -465,7 +465,7 @@ func SetIntercept(ads []Adsource) { } } -func VerifyAd(advertisement AdConfig) error { +func VerifyAd(advertisement *AdConfig) error { body := advertisement.Title + advertisement.Price + advertisement.ID + "Kleinanzeigen => " + advertisement.Category + advertisement.Condition + advertisement.Created @@ -525,7 +525,7 @@ func TestMain(t *testing.T) { // verify if downloaded ads match for _, ad := range adsrc { - if err := VerifyAd(ad); err != nil { + if err := VerifyAd(&ad); err != nil { t.Errorf(err.Error()) } }