// インデックスにリクエストして「もっと見る」を最大10ページ辿る // WaitAfterTimeout秒たったら問答無用で打ち切る func indexMoreAndMoreScenario(s *checker.Session) { var imageUrls []string start := time.Now() imagePerPageChecker := checkHTML(func(doc *goquery.Document) error { imageUrls = extractImages(doc) if len(imageUrls) < PostsPerPage { return errors.New("1ページに表示される画像の数が足りません") } return nil }) index := checker.NewAction("GET", "/") index.ExpectedLocation = `^/$` index.Description = "インデックスページが表示できること" index.CheckFunc = imagePerPageChecker err := index.Play(s) if err != nil { return } loadAssets(s) loadImages(s, imageUrls) offset := util.RandomNumber(10) // 10は適当。URLをバラけさせるため for i := 0; i < 10; i++ { // 10ページ辿る maxCreatedAt := time.Date(2016, time.January, 2, 11, 46, 21-PostsPerPage*i+offset, 0, time.FixedZone("Asia/Tokyo", 9*60*60)) imageUrls = []string{} posts := checker.NewAction("GET", "/posts?max_created_at="+url.QueryEscape(maxCreatedAt.Format(time.RFC3339))) posts.Description = "インデックスページの「もっと見る」が表示できること" posts.CheckFunc = imagePerPageChecker err := posts.Play(s) if err != nil { return } loadImages(s, imageUrls) if time.Now().Sub(start) > WaitAfterTimeout { break } } }
// 誤ったパスワードでログインできない func cannotLoginWrongPasswordScenario(s *checker.Session, me user) { fakeUser := map[string]string{ "account_name": me.AccountName, "password": util.RandomLUNStr(util.RandomNumber(15) + 10), } login := checker.NewAction("POST", "/login") login.Description = "間違ったパスワードでログインできないこと" login.ExpectedLocation = `^/login$` login.PostData = fakeUser login.CheckFunc = checkHTML(func(doc *goquery.Document) error { message := strings.TrimSpace(doc.Find(`#notice-message`).Text()) if message != "アカウント名かパスワードが間違っています" { return errors.New("ログインエラーメッセージが表示されていません") } return nil }) login.Play(s) }
func randomImage(images []*checker.Asset) *checker.Asset { return images[util.RandomNumber(len(images))] }
func randomSentence(sentences []string) string { return sentences[util.RandomNumber(len(sentences))] }
func randomUser(users []user) user { return users[util.RandomNumber(len(users))] }