Example #1
0
// インデックスにリクエストして「もっと見る」を最大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
		}
	}
}
Example #2
0
// 誤ったパスワードでログインできない
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)
}
Example #3
0
func randomImage(images []*checker.Asset) *checker.Asset {
	return images[util.RandomNumber(len(images))]
}
Example #4
0
func randomSentence(sentences []string) string {
	return sentences[util.RandomNumber(len(sentences))]
}
Example #5
0
func randomUser(users []user) user {
	return users[util.RandomNumber(len(users))]
}