Skip to content

Commit

Permalink
:shipit:
Browse files Browse the repository at this point in the history
  • Loading branch information
ghostec committed Dec 26, 2017
1 parent 0348ede commit 9bcdebd
Show file tree
Hide file tree
Showing 3 changed files with 101 additions and 21 deletions.
18 changes: 16 additions & 2 deletions api/membership.go
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,14 @@ func ApplyForMembershipHandler(app *App) func(c echo.Context) error {
return nil
})
if err != nil {
return FailWith(http.StatusInternalServerError, err.Error(), c)
switch err.(type) {
case *models.ModelNotFoundError:
return FailWith(http.StatusBadRequest, err.Error(), c)
case *models.AlreadyHasValidMembershipError:
return FailWith(http.StatusConflict, err.Error(), c)
default:
return FailWith(http.StatusInternalServerError, err.Error(), c)
}
}

err = WithSegment("hook-dispatch", c, func() error {
Expand Down Expand Up @@ -379,7 +386,14 @@ func ApproveOrDenyMembershipApplicationHandler(app *App) func(c echo.Context) er
return nil
})
if err != nil {
return err
switch err.(type) {
case *models.ModelNotFoundError:
return FailWith(http.StatusBadRequest, err.Error(), c)
case *models.CannotApproveOrDenyMembershipAlreadyProcessedError:
return FailWith(http.StatusConflict, err.Error(), c)
default:
return err
}
}

err = WithSegment("player-retrieve", c, func() error {
Expand Down
70 changes: 68 additions & 2 deletions api/membership_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,42 @@ var _ = Describe("Membership API Handler", func() {
Expect(dbMembership.Message).To(Equal(payload["message"]))
})

It("Should conflict when player is already a member", func() {
_, clan, owner, players, memberships, err := models.GetClanWithMemberships(testDb, 0, 0, 0, 1, "", "")
Expect(err).NotTo(HaveOccurred())

memberships[0].RequestorID = memberships[0].PlayerID
_, err = testDb.Update(memberships[0])

gameID := clan.GameID
clanPublicID := clan.PublicID

payload := map[string]interface{}{
"playerPublicID": players[0].PublicID,
"requestorPublicID": owner.PublicID,
}
status, body := PostJSON(a, CreateMembershipRoute(gameID, clanPublicID, "application/approve"), payload)

Expect(status).To(Equal(http.StatusOK))
var result map[string]interface{}
json.Unmarshal([]byte(body), &result)
Expect(result["success"]).To(BeTrue())

dbMembership, err := models.GetValidMembershipByClanAndPlayerPublicID(a.Db, gameID, clanPublicID, players[0].PublicID)
Expect(err).NotTo(HaveOccurred())
Expect(dbMembership.Approved).To(Equal(true))
Expect(dbMembership.Denied).To(Equal(false))

payload = map[string]interface{}{
"level": "Member",
"playerPublicID": players[0].PublicID,
"message": "Please accept me, I am nice",
}
status, body = PostJSON(a, CreateMembershipRoute(gameID, clanPublicID, "application"), payload)

Expect(status).To(Equal(http.StatusConflict))
})

It("Should create membership application sending a message after player left clan", func() {
_, clan, _, players, _, err := models.GetClanWithMemberships(testDb, 0, 0, 0, 1, "", "")
Expect(err).NotTo(HaveOccurred())
Expand Down Expand Up @@ -229,7 +265,7 @@ var _ = Describe("Membership API Handler", func() {

status, body := PostJSON(a, CreateMembershipRoute(gameID, clanPublicID, "application"), payload)

Expect(status).To(Equal(http.StatusInternalServerError))
Expect(status).To(Equal(http.StatusBadRequest))
var result map[string]interface{}
json.Unmarshal([]byte(body), &result)
Expect(result["success"]).To(BeFalse())
Expand Down Expand Up @@ -581,6 +617,36 @@ var _ = Describe("Membership API Handler", func() {
Expect(dbMembership.Denied).To(Equal(false))
})

It("Should conflict when player is already a member", func() {
_, clan, owner, players, memberships, err := models.GetClanWithMemberships(testDb, 0, 0, 0, 1, "", "")
Expect(err).NotTo(HaveOccurred())

memberships[0].RequestorID = memberships[0].PlayerID
_, err = testDb.Update(memberships[0])

gameID := clan.GameID
clanPublicID := clan.PublicID

payload := map[string]interface{}{
"playerPublicID": players[0].PublicID,
"requestorPublicID": owner.PublicID,
}
status, body := PostJSON(a, CreateMembershipRoute(gameID, clanPublicID, "application/approve"), payload)

Expect(status).To(Equal(http.StatusOK))
var result map[string]interface{}
json.Unmarshal([]byte(body), &result)
Expect(result["success"]).To(BeTrue())

dbMembership, err := models.GetValidMembershipByClanAndPlayerPublicID(a.Db, gameID, clanPublicID, players[0].PublicID)
Expect(err).NotTo(HaveOccurred())
Expect(dbMembership.Approved).To(Equal(true))
Expect(dbMembership.Denied).To(Equal(false))

status, body = PostJSON(a, CreateMembershipRoute(gameID, clanPublicID, "application/approve"), payload)
Expect(status).To(Equal(http.StatusConflict))
})

It("Should deny membership application", func() {
_, clan, owner, players, memberships, err := models.GetClanWithMemberships(testDb, 0, 0, 0, 1, "", "")
Expect(err).NotTo(HaveOccurred())
Expand Down Expand Up @@ -646,7 +712,7 @@ var _ = Describe("Membership API Handler", func() {

status, body := PostJSON(a, CreateMembershipRoute(gameID, clanPublicID, "application/approve"), payload)

Expect(status).To(Equal(http.StatusInternalServerError))
Expect(status).To(Equal(http.StatusBadRequest))
var result map[string]interface{}
json.Unmarshal([]byte(body), &result)
Expect(result["success"]).To(BeFalse())
Expand Down
34 changes: 17 additions & 17 deletions db/migrations.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 9bcdebd

Please sign in to comment.