github.com/oinume/lekcije@v0.0.0-20231017100347-5b4c5eb6ab24/backend/cmd/teacher_error_resetter/main_test.go (about)

     1  package main
     2  
     3  import (
     4  	"io"
     5  	"net/http"
     6  	"os"
     7  	"testing"
     8  
     9  	"github.com/oinume/lekcije/backend/domain/config"
    10  	"github.com/oinume/lekcije/backend/internal/mock"
    11  	"github.com/oinume/lekcije/backend/model"
    12  )
    13  
    14  var helper *model.TestHelper
    15  
    16  func TestMain(m *testing.M) {
    17  	config.MustProcessDefault()
    18  	helper = model.NewTestHelper()
    19  	// NOTE: Avoid "Failed to FindByPK: id=1: record not found"
    20  	helper.TruncateAllTables(nil)
    21  	os.Exit(m.Run())
    22  }
    23  
    24  func Test_teacherErrorResetterMain_run(t *testing.T) {
    25  	type fields struct {
    26  		outStream io.Writer
    27  		errStream io.Writer
    28  	}
    29  
    30  	tests := map[string]struct {
    31  		args    []string
    32  		fields  fields
    33  		wantErr bool
    34  	}{
    35  		"normal": {
    36  			args: []string{"teacher_error_resetter", "-concurrency=1"},
    37  			fields: fields{
    38  				outStream: os.Stdout,
    39  				errStream: os.Stderr,
    40  			},
    41  			wantErr: false,
    42  		},
    43  	}
    44  
    45  	for name, test := range tests {
    46  		t.Run(name, func(t *testing.T) {
    47  			m := &teacherErrorResetterMain{
    48  				outStream: test.fields.outStream,
    49  				errStream: test.fields.errStream,
    50  				db:        helper.DB(t),
    51  			}
    52  
    53  			teacherService := model.NewTeacherService(helper.DB(t))
    54  			teacher := helper.CreateRandomTeacher(t)
    55  			teacher.YearsOfExperience = 1
    56  			teacher.FavoriteCount = 10
    57  			teacher.Rating = 4.8
    58  			teacher.FetchErrorCount = 10
    59  			if err := teacherService.CreateOrUpdate(teacher); err != nil {
    60  				t.Fatalf("teacherService.CreateOrUpdate failed: err=%v", err)
    61  			}
    62  
    63  			mockTransport, err := mock.NewHTMLTransport("../../infrastructure/dmm_eikaiwa/testdata/49393.html")
    64  			if err != nil {
    65  				t.Fatalf("fetcher.NewMockTransport failed: err=%v", err)
    66  			}
    67  			m.httpClient = &http.Client{
    68  				Transport: mockTransport,
    69  			}
    70  
    71  			if err := m.run(test.args); (err != nil) != test.wantErr {
    72  				t.Fatalf("teacherErrorResetterMain.run() error = %v, wantErr %v", err, test.wantErr)
    73  			}
    74  
    75  			gotTeacher, err := teacherService.FindByPK(teacher.ID)
    76  			if err != nil {
    77  				t.Fatalf("teacherService.FindByPK failed: err=%v", err)
    78  			}
    79  			if got, want := gotTeacher.FetchErrorCount, uint8(0); got != want {
    80  				t.Errorf("FetchErrorCount doesn't match: got=%v, want=%v", got, want)
    81  			}
    82  		})
    83  	}
    84  }