fix webhook test (#2415)
* fix webhook test * fix error message * fix typo
This commit is contained in:
		
					parent
					
						
							
								491f0ebc58
							
						
					
				
			
			
				commit
				
					
						3e6fed368b
					
				
			
		
					 2 changed files with 63 additions and 46 deletions
				
			
		| 
						 | 
					@ -482,6 +482,57 @@ func UpdateHookTask(t *HookTask) error {
 | 
				
			||||||
	return err
 | 
						return err
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// PrepareWebhook adds special webhook to task queue for given payload.
 | 
				
			||||||
 | 
					func PrepareWebhook(w *Webhook, repo *Repository, event HookEventType, p api.Payloader) error {
 | 
				
			||||||
 | 
						switch event {
 | 
				
			||||||
 | 
						case HookEventCreate:
 | 
				
			||||||
 | 
							if !w.HasCreateEvent() {
 | 
				
			||||||
 | 
								return nil
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						case HookEventPush:
 | 
				
			||||||
 | 
							if !w.HasPushEvent() {
 | 
				
			||||||
 | 
								return nil
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						case HookEventPullRequest:
 | 
				
			||||||
 | 
							if !w.HasPullRequestEvent() {
 | 
				
			||||||
 | 
								return nil
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						var payloader api.Payloader
 | 
				
			||||||
 | 
						var err error
 | 
				
			||||||
 | 
						// Use separate objects so modifications won't be made on payload on non-Gogs/Gitea type hooks.
 | 
				
			||||||
 | 
						switch w.HookTaskType {
 | 
				
			||||||
 | 
						case SLACK:
 | 
				
			||||||
 | 
							payloader, err = GetSlackPayload(p, event, w.Meta)
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								return fmt.Errorf("GetSlackPayload: %v", err)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						case DISCORD:
 | 
				
			||||||
 | 
							payloader, err = GetDiscordPayload(p, event, w.Meta)
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								return fmt.Errorf("GetDiscordPayload: %v", err)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						default:
 | 
				
			||||||
 | 
							p.SetSecret(w.Secret)
 | 
				
			||||||
 | 
							payloader = p
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if err = CreateHookTask(&HookTask{
 | 
				
			||||||
 | 
							RepoID:      repo.ID,
 | 
				
			||||||
 | 
							HookID:      w.ID,
 | 
				
			||||||
 | 
							Type:        w.HookTaskType,
 | 
				
			||||||
 | 
							URL:         w.URL,
 | 
				
			||||||
 | 
							Payloader:   payloader,
 | 
				
			||||||
 | 
							ContentType: w.ContentType,
 | 
				
			||||||
 | 
							EventType:   event,
 | 
				
			||||||
 | 
							IsSSL:       w.IsSSL,
 | 
				
			||||||
 | 
						}); err != nil {
 | 
				
			||||||
 | 
							return fmt.Errorf("CreateHookTask: %v", err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// PrepareWebhooks adds new webhooks to task queue for given payload.
 | 
					// PrepareWebhooks adds new webhooks to task queue for given payload.
 | 
				
			||||||
func PrepareWebhooks(repo *Repository, event HookEventType, p api.Payloader) error {
 | 
					func PrepareWebhooks(repo *Repository, event HookEventType, p api.Payloader) error {
 | 
				
			||||||
	ws, err := GetActiveWebhooksByRepoID(repo.ID)
 | 
						ws, err := GetActiveWebhooksByRepoID(repo.ID)
 | 
				
			||||||
| 
						 | 
					@ -503,51 +554,9 @@ func PrepareWebhooks(repo *Repository, event HookEventType, p api.Payloader) err
 | 
				
			||||||
		return nil
 | 
							return nil
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	var payloader api.Payloader
 | 
					 | 
				
			||||||
	for _, w := range ws {
 | 
						for _, w := range ws {
 | 
				
			||||||
		switch event {
 | 
							if err = PrepareWebhook(w, repo, event, p); err != nil {
 | 
				
			||||||
		case HookEventCreate:
 | 
								return err
 | 
				
			||||||
			if !w.HasCreateEvent() {
 | 
					 | 
				
			||||||
				continue
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		case HookEventPush:
 | 
					 | 
				
			||||||
			if !w.HasPushEvent() {
 | 
					 | 
				
			||||||
				continue
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		case HookEventPullRequest:
 | 
					 | 
				
			||||||
			if !w.HasPullRequestEvent() {
 | 
					 | 
				
			||||||
				continue
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		// Use separate objects so modifications won't be made on payload on non-Gogs/Gitea type hooks.
 | 
					 | 
				
			||||||
		switch w.HookTaskType {
 | 
					 | 
				
			||||||
		case SLACK:
 | 
					 | 
				
			||||||
			payloader, err = GetSlackPayload(p, event, w.Meta)
 | 
					 | 
				
			||||||
			if err != nil {
 | 
					 | 
				
			||||||
				return fmt.Errorf("GetSlackPayload: %v", err)
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		case DISCORD:
 | 
					 | 
				
			||||||
			payloader, err = GetDiscordPayload(p, event, w.Meta)
 | 
					 | 
				
			||||||
			if err != nil {
 | 
					 | 
				
			||||||
				return fmt.Errorf("GetDiscordPayload: %v", err)
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		default:
 | 
					 | 
				
			||||||
			p.SetSecret(w.Secret)
 | 
					 | 
				
			||||||
			payloader = p
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		if err = CreateHookTask(&HookTask{
 | 
					 | 
				
			||||||
			RepoID:      repo.ID,
 | 
					 | 
				
			||||||
			HookID:      w.ID,
 | 
					 | 
				
			||||||
			Type:        w.HookTaskType,
 | 
					 | 
				
			||||||
			URL:         w.URL,
 | 
					 | 
				
			||||||
			Payloader:   payloader,
 | 
					 | 
				
			||||||
			ContentType: w.ContentType,
 | 
					 | 
				
			||||||
			EventType:   event,
 | 
					 | 
				
			||||||
			IsSSL:       w.IsSSL,
 | 
					 | 
				
			||||||
		}); err != nil {
 | 
					 | 
				
			||||||
			return fmt.Errorf("CreateHookTask: %v", err)
 | 
					 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return nil
 | 
						return nil
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -545,6 +545,14 @@ func DiscordHooksEditPost(ctx *context.Context, form auth.NewDiscordHookForm) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// TestWebhook test if web hook is work fine
 | 
					// TestWebhook test if web hook is work fine
 | 
				
			||||||
func TestWebhook(ctx *context.Context) {
 | 
					func TestWebhook(ctx *context.Context) {
 | 
				
			||||||
 | 
						hookID := ctx.ParamsInt64(":id")
 | 
				
			||||||
 | 
						w, err := models.GetWebhookByRepoID(ctx.Repo.Repository.ID, hookID)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							ctx.Flash.Error("GetWebhookByID: " + err.Error())
 | 
				
			||||||
 | 
							ctx.Status(500)
 | 
				
			||||||
 | 
							return
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Grab latest commit or fake one if it's empty repository.
 | 
						// Grab latest commit or fake one if it's empty repository.
 | 
				
			||||||
	commit := ctx.Repo.Commit
 | 
						commit := ctx.Repo.Commit
 | 
				
			||||||
	if commit == nil {
 | 
						if commit == nil {
 | 
				
			||||||
| 
						 | 
					@ -581,8 +589,8 @@ func TestWebhook(ctx *context.Context) {
 | 
				
			||||||
		Pusher: apiUser,
 | 
							Pusher: apiUser,
 | 
				
			||||||
		Sender: apiUser,
 | 
							Sender: apiUser,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if err := models.PrepareWebhooks(ctx.Repo.Repository, models.HookEventPush, p); err != nil {
 | 
						if err := models.PrepareWebhook(w, ctx.Repo.Repository, models.HookEventPush, p); err != nil {
 | 
				
			||||||
		ctx.Flash.Error("PrepareWebhooks: " + err.Error())
 | 
							ctx.Flash.Error("PrepareWebhook: " + err.Error())
 | 
				
			||||||
		ctx.Status(500)
 | 
							ctx.Status(500)
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		go models.HookQueue.Add(ctx.Repo.Repository.ID)
 | 
							go models.HookQueue.Add(ctx.Repo.Repository.ID)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue