From b2a7a6ab60f5fd37fdbec40886866969dfb226a9 Mon Sep 17 00:00:00 2001
From: Masaki Ozawa
+ test issue
+ created by ozamasa.
+ test descriptionspace_id
parameter as below.
+ %pre {{endpoint}}?space_id=hogehoge
diff --git a/lib/hooks/backlog/helper.rb b/lib/hooks/backlog/helper.rb
new file mode 100644
index 0000000..81cb006
--- /dev/null
+++ b/lib/hooks/backlog/helper.rb
@@ -0,0 +1,51 @@
+module Idobata::Hook
+ class Backlog < Base
+ module Helper
+ def type_label
+ case payload.type
+ when 1
+ label = 'created'
+ when 2
+ label = 'updated'
+ when 3
+ label = 'commented'
+ when 4
+ label = 'issue deleted'
+ when 17
+ label = 'noticed'
+ when 14
+ label = 'multiple issues updated'
+ end
+ label
+ end
+
+ def backlog_url_base
+ "https://#{space_id}.backlog.jp/view/#{payload.project.projectKey}" if space_id
+ end
+
+ def backlog_urls
+ urls = []
+ if backlog_url_base
+ if payload.content.key_id
+ url = "#{backlog_url_base}-#{payload.content.key_id}"
+ url += "#comment-#{payload.content.comment.id}" if payload.content.comment && payload.content.comment.id
+ urls << url
+ else
+ payload.content.link.each do |link|
+ urls << "#{backlog_url_base}-#{link.key_id}" if link.key_id
+ end
+ end
+ end
+ urls
+ end
+
+ def md(source)
+ HTML::Pipeline::MarkdownFilter.new(source, gfm: true).call.to_s.html_safe
+ end
+
+ def hbr(source)
+ html_escape(source).gsub(/\r\n|\r|\n/, "
").html_safe
+ end
+ end
+ end
+end
diff --git a/lib/hooks/backlog/hook.rb b/lib/hooks/backlog/hook.rb
new file mode 100644
index 0000000..f548514
--- /dev/null
+++ b/lib/hooks/backlog/hook.rb
@@ -0,0 +1,23 @@
+module Idobata::Hook
+ class Backlog < Base
+ screen_name 'backlog'
+ icon_url hook_image_url('icon.png')
+ template_name { "#{type}.html.haml" }
+
+ helper Helper
+
+ private
+
+ def type
+ case payload.type
+ when 1, 2, 3, 4, 14, 17
+ 'issue'
+ end
+ end
+
+ def space_id
+ params[:space_id] || nil
+ end
+
+ end
+end
diff --git a/lib/hooks/backlog/images/icon.png b/lib/hooks/backlog/images/icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..26815ecbed1386a03e4048b5c8036e5b71035163
GIT binary patch
literal 2033
zcmXw32{=@38$L6b>}!@8gNd@0EQ8FT=0p50VPeQfmeNm=Xi~C|FhetALY4_dDkM7%
zk?
+ test issue + created by ozamasa. +
+ https://test.backlog.jp/view/TEST-100 +
+test description
+ + HTML + + its([:format]) { should eq(:html) } + end + + context 'on issue update' do + let(:payload_type) { 'issue_update' } + + before do + post payload, {'Content-Type' => 'application/json'}, {space_id: 'test'} + end + + its([:source]) { should eq(<<-HTML.strip_heredoc) } ++ test issue + updated by ozamasa. +
+ https://test.backlog.jp/view/TEST-100#comment-200 +
+ + + HTML + + its([:format]) { should eq(:html) } + end + + context 'on issue comment' do + let(:payload_type) { 'issue_comment' } + + before do + post payload, {'Content-Type' => 'application/json'}, {space_id: 'test'} + end + + its([:source]) { should eq(<<-HTML.strip_heredoc) } ++ test issue + commented by ozamasa. +
+ https://test.backlog.jp/view/TEST-100#comment-200 +
+test comment
+ + HTML + + its([:format]) { should eq(:html) } + end + + context 'on issue comment' do + let(:payload_type) { 'issue_comment' } + + before do + post payload, {'Content-Type' => 'application/json'}, {space_id: 'test'} + end + + its([:source]) { should eq(<<-HTML.strip_heredoc) } ++ test issue + commented by ozamasa. +
+ https://test.backlog.jp/view/TEST-100#comment-200 +
+test comment
+ + HTML + + its([:format]) { should eq(:html) } + end + + context 'on issue delete' do + let(:payload_type) { 'issue_delete' } + + before do + post payload, {'Content-Type' => 'application/json'}, {space_id: 'test'} + end + + its([:source]) { should eq(<<-HTML.strip_heredoc) } ++ + issue deleted by ozamasa. +
+ https://test.backlog.jp/view/TEST-100 +
+ + HTML + + its([:format]) { should eq(:html) } + end + + context 'on issue multipul update' do + let(:payload_type) { 'issue_multipul_update' } + + before do + post payload, {'Content-Type' => 'application/json'}, {space_id: 'test'} + end + + its([:source]) { should eq(<<-HTML.strip_heredoc) } ++ + multiple issues updated by ozamasa. +
+ https://test.backlog.jp/view/TEST-100 +
++ https://test.backlog.jp/view/TEST-101 +
+ + HTML + + its([:format]) { should eq(:html) } + end + + context 'on issue notice' do + let(:payload_type) { 'issue_notice' } + + before do + post payload, {'Content-Type' => 'application/json'}, {space_id: 'test'} + end + + its([:source]) { should eq(<<-HTML.strip_heredoc) } ++ test issue + noticed by ozamasa. +
+ https://test.backlog.jp/view/TEST-100#comment-200 +
+test comment
+ + HTML + + its([:format]) { should eq(:html) } + end + end +end diff --git a/spec/fixtures/payload/backlog/issue_comment.json b/spec/fixtures/payload/backlog/issue_comment.json new file mode 100644 index 0000000..5f1ef3a --- /dev/null +++ b/spec/fixtures/payload/backlog/issue_comment.json @@ -0,0 +1,32 @@ +{ + "created":"2015-11-24T00:00:00Z", + "project":{ + "archived":false, + "projectKey":"TEST", + "name":"TestProject", + "chartEnabled":false, + "id":100, + "subtaskingEnabled":false + }, + "id":10, + "type":3, + "content":{ + "summary":"test issue", + "key_id":100, + "description":"test description", + "comment":{ + "id":200, + "content":"test comment" + }, + "id":100 + }, + "notifications":[], + "createdUser":{ + "name":"ozamasa", + "mailAddress":null, + "id":6336, + "roleType":1, + "lang":"ja", + "userId":null + } +} diff --git a/spec/fixtures/payload/backlog/issue_create.json b/spec/fixtures/payload/backlog/issue_create.json new file mode 100644 index 0000000..163a1ec --- /dev/null +++ b/spec/fixtures/payload/backlog/issue_create.json @@ -0,0 +1,28 @@ +{ + "created":"2015-11-24T00:00:00Z", + "project":{ + "archived":false, + "projectKey":"TEST", + "name":"TestProject", + "chartEnabled":false, + "id":100, + "subtaskingEnabled":false + }, + "id":10, + "type":1, + "content":{ + "summary":"test issue", + "key_id":100, + "description":"test description", + "id":100 + }, + "notifications":[], + "createdUser":{ + "name":"ozamasa", + "mailAddress":null, + "id":6336, + "roleType":1, + "lang":"ja", + "userId":null + } +} diff --git a/spec/fixtures/payload/backlog/issue_delete.json b/spec/fixtures/payload/backlog/issue_delete.json new file mode 100644 index 0000000..a951e6a --- /dev/null +++ b/spec/fixtures/payload/backlog/issue_delete.json @@ -0,0 +1,26 @@ +{ + "created":"2015-11-24T00:00:00Z", + "project":{ + "archived":false, + "projectKey":"TEST", + "name":"TestProject", + "chartEnabled":false, + "id":100, + "subtaskingEnabled":false + }, + "id":10, + "type":4, + "content":{ + "key_id":100, + "id":100 + }, + "notifications":[], + "createdUser":{ + "name":"ozamasa", + "mailAddress":null, + "id":6336, + "roleType":1, + "lang":"ja", + "userId":null + } +} diff --git a/spec/fixtures/payload/backlog/issue_multipul_update.json b/spec/fixtures/payload/backlog/issue_multipul_update.json new file mode 100644 index 0000000..d3a6fbe --- /dev/null +++ b/spec/fixtures/payload/backlog/issue_multipul_update.json @@ -0,0 +1,44 @@ +{ + "created":"2015-11-24T00:00:00Z", + "project":{ + "archived":false, + "projectKey":"TEST", + "name":"TestProject", + "chartEnabled":false, + "id":100, + "subtaskingEnabled":false + }, + "id":10, + "type":14, + "content":{ + "link":[ + { + "key_id":"100", + "id":"100", + "title":"test issue1" + }, + { + "key_id":"101", + "id":"101", + "title":"test issue2" + } + ], + "changes":[ + { + "field":"priority", + "type":"standard", + "new_value":"高" + } + ], + "tx_id":"200" + }, + "notifications":[], + "createdUser":{ + "name":"ozamasa", + "mailAddress":null, + "id":6336, + "roleType":1, + "lang":"ja", + "userId":null + } +} diff --git a/spec/fixtures/payload/backlog/issue_notice.json b/spec/fixtures/payload/backlog/issue_notice.json new file mode 100644 index 0000000..19f0491 --- /dev/null +++ b/spec/fixtures/payload/backlog/issue_notice.json @@ -0,0 +1,32 @@ +{ + "created":"2015-11-24T00:00:00Z", + "project":{ + "archived":false, + "projectKey":"TEST", + "name":"TestProject", + "chartEnabled":false, + "id":100, + "subtaskingEnabled":false + }, + "id":10, + "type":17, + "content":{ + "summary":"test issue", + "key_id":100, + "description":"test description", + "comment":{ + "id":200, + "content":"test comment" + }, + "id":100 + }, + "notifications":[], + "createdUser":{ + "name":"ozamasa", + "mailAddress":null, + "id":6336, + "roleType":1, + "lang":"ja", + "userId":null + } +} diff --git a/spec/fixtures/payload/backlog/issue_update.json b/spec/fixtures/payload/backlog/issue_update.json new file mode 100644 index 0000000..5d63aa4 --- /dev/null +++ b/spec/fixtures/payload/backlog/issue_update.json @@ -0,0 +1,38 @@ +{ + "created":"2015-11-24T00:00:00Z", + "project":{ + "archived":false, + "projectKey":"TEST", + "name":"TestProject", + "chartEnabled":false, + "id":100, + "subtaskingEnabled":false + }, + "id":10, + "type":2, + "content":{ + "summary":"test issue", + "key_id":100, + "changes":[{ + "field":"priority", + "old_value":"3", + "type":"standard", + "new_value":"2" + }], + "description":"test description", + "comment":{ + "id":200, + "content":"" + }, + "id":100 + }, + "notifications":[], + "createdUser":{ + "name":"ozamasa", + "mailAddress":null, + "id":6336, + "roleType":1, + "lang":"ja", + "userId":null + } +} From 1d16d17bcbbc72b2f39ff261e9cfcaa85145213a Mon Sep 17 00:00:00 2001 From: Masaki Ozawa9ROD@83(xh;}Z@%#}5B10M=drtAlx{7T!^T^ZHz&pAjeo3;o>--fkvV zbH?Hg)8;o_x{_0qf=!256T$lMll{8Hys-@16(+yD-~ysbp?esD3k!lZ7P(>^d;0qU ztTq6vg;}UTrRs_3z-os*hvaAH(Z~Ix17yU{<~Cw;%Bsj6*FVN-kq8#fF!}4*w-xN_ z(l6L$kB<4Mas}bCgL`PDZXrVE8;@L33|0qVxd5!)OhN@JwTncINfp5tu>edy(l^r2 zY#jB_lAqIA9^9naB_;Fd76d~M|)rXT4pimBb7X5nN!~Ha{WYO;a%#X>G!b> ;$=mC{tan1y~eW+60?MvUV4lgO4$IKX3JVTey>kGPrS>O(4L%fBLF+7P jw)pj?lXZZHO}bXZMRfENWtQ!T(ZX~+0(v}LE`lX_rP%2vq81;qXlm5 zV=phM(+#TcytJf-h;~GBfI{IMEL5q%Q8ov8r#majbs0EGR&854@6HKZt+5PN|7b8n zh_OGy6=j @-P%^bf;_O?7l3arQ>pf^G^=PN-+-0ZflE z%`2c$k!q+`BV#_=W(%?%G{zEH4XD*>O`(ED8sT?3?7=0^82F7zNTFLaDrldbw~DuX zl}%4iKn{p~qh8uxF&~hh gvV1&%@lz0uEKn+xQZGQI*3p&e*j!Mk zO0H6xBrS{*TLr}-05R4Oy=GZ#vE0D5nn3l)? 6zijo#;Dpig6hitozB7jpsSd@G0Ij`eT zX=Yc>SV#}RX3bkkWL_a`L7p782}hzntOZodBcQSd&*4RtVlsf{Kxt~23A_rxk{a`B zm9UCc#>WFR8;Cz(e!vp>sp`M;QZTks4XS`>Y|3V}Qo4ha7{{2r$=AC+$6LDAY9(=h zL@g6m@od=d52_Ukh0P|0E*$Qt0@b&J@l 9E# cNnsOwKg^)8Xjd5os*c{HP>zKUaia&sL2*qs?l3@QSv5I!u2qwS zl~OhaWFc7S{$<&$#OI4>*EM#PzCcl=Qqg1D0IC3!K(Rb=76CeNYzJvMxhL+9u(+(^ z@@Wf6&E>{AVT3{jN<}_2UT1*0fh?Pa*sT+yutj#2x`nX&M@33tX)GC33NB2uNPvn} zb067COEN>)5IQV3RIVhSzuGu+7pEI^XDSp3Y}YvLPTa;-Q>tj!FF=nI4Wt62Hga!a z8!Ck4l@Fe#kVrLDHP880Qh(D^hBz!CS6IBLcIT DB1k_w+(ZyFLePKNLWeDHV4~ufF|O^rWRBY z6AT$$he)oPc@uM=sTth8Bkk$$nTJV@=EGYFH%0s5h%zQDU9v{~-m1k10I{TxSR0?3 z%h=>uOiCaKO7*U93a%jQR$|Z-Cxao)_=JNGtXfg-Q^@^OQqt3LJ5*6A6_n-8quZHp zoH+0v;ldKa N_piK&?X!sk%s6w(m@4kye|+`N z2vv`gy@is6Mc1#Qtcv6)xMzd7uzs8>&3fvTurdr(f;F;w6IosAF>m@p#XFFSvT9Py z_>6@!J<6Y76~9i@hgVIgm`zs9ox =gtf)4_J>Qy z)QGO~4AR&zLwQTpgLK2mH$L7$KKvx{40ep2@Wc|M9RqaqoT(=JdT=;NHK_jK#o8LZ zp^TXfFxaM k5 z9eSWRRH#x!bO4r~7T|4{N$VOsOWr!Mhq?Qh2E3?HjjBNfwwXlj`^QwGf*+ZqyZ!Nl z=b8LmX~5g~^RG4ar~=i4zpbs0K9OEtz^7itmE=$5t=d2;Wf0pW{=u#!P=ZRO-(zsU z&9t`dz>{G`Fv-;E7Eq}c#i0VAa7=0gZ!+8xS@TCb$;YA@6b6WuB&(DnPytXFKQ*%) zM}>@M{`9lc-N(ou|DsPUr6RnZr@z*;MRBMC5`fZM?q~8Hlyos%F8{07*V3!WEapDl zX+ibC3$+`>2fU@#W9V?;8#ir$+Sv36IX@tMpx46ojl^u x% zi*4KAeU`d@vhJfs_e& (bI &BH`{{ET@WxfCbd+ir z#!*UlBpg!n*oDEfWc$Hq%=-1#KlAmb9>t&nm0CwsTGpYq+H>zuJ8M0?FK&Gsyz}$` zP#Y6H!7dRfglR2rGTc(?!2&WmH}(@&Ymz-d>K+xFd28X8irqNpbMnRo72Me+;r=Z0 zUeXOJ)u 3Gz994SKrCLl1eLUQh8}>ia@zY8p}CYIrfB`wzlN* zTgeS`mYL-~x}W_ vF;*s6vT-Wi$D{&`zLu7Tt7UO8^#dq4Qz5hq5xP_}ot5NjXt3C5 zSzpzB^VN5fmQ(xTJE*&hk{aVvI5iK{%9F}-ZAnzB-c)W#K{;7axy(>7?RfWDvhA%W z$>H|5DNwjmZOD9Mqx5(9f1w3{mrbo^cHLN(Et}-QXKOvZ&xp;Z?cmN62hwu?pjTgO zHc#uXXN|LOH}2m0qgU=D2PEw0fKWaD`>&I?PQ1$O_rgKp%cfQt5vr6=&x@&4_ZUp2 zq{#g(pT3j%?}K~d{pY?Xs1nIBR032vbO~9#W38w5Y2&vkXXV%3I%hAaRZQwRm7wgs`&Ga9^dk@is^n<$AxAo zyk(q*6LDSlBv7j`RCjHybwN*Ft%M)X6BW`;%~=K)7**$42Hl4-kVJsQN>!)Wn+CKg za_m&sF=lU+T7^}0HfT&0vKmk;S2Cy!cbupk5Lu0>GSP7My1^4x^_nRa%O+>1RHI9k z5zgc?XtsHIT&Nnh*4AXwiiwXHoC6qhhJiwbpUI^fyw$=mR7|C+VJNerfm*TW0)9%x zNv74a7IK=@v+8(IRWaX_C>gjj=mJ*FTtJs>sPTPShROul=9+j=RcBJy!lL_!>x^nu zSQ(4!$4X7^{^^-*hTj*(gbJST%A}R*M>^PCSA|evQb8$&%FQY;#8MX{!yD86tKU*v zqZA=Vin~rSI9`Qn^ Y#8 z8Y;_BiQ!rZ?%YCyyL1zhMcqf!y6=p5QJ&Nj6(%*YKh3%eXm&e!;g}h+&21B)8i#*U zDP|nE!Z_uPqp$MT%|bk7+-!5pM5RjcP33(4aT!Hxc;7w6)k+V0Pp^7c9#l{Am`dl& zL_lUe$$k5S-~wX6Jh^}ml4@xOPwtO--;9=R-csMx5-X }q+Qw{k6G zsjg#jCp8;ve99f`msWTKkEz#BrBK7DRxEF_X*PS~*d8M^i&V<)m{7%2s!Tek7lGPy zXeV#&8ri$x`kBOHE7c1P^vs a#?Y*Z+UQPj-TXqGf zB2BmN&maB4EMLd-LPJwSvL{6^{aA0H9z%7xf8niXXpF^8p0#xyBQN~lGiLfqYf^bq zG*pd5$AMrL;eD!UEo~g!q{mTD{OJ+HCahwZ`-LR2R7|K|ysN1vS!N?M 6wo|vJ{SASD`g2*_b-eNItLz!JtNxuJue>dDd5PATG3S}~N-}u|R zno@?!nvU Hn zu`nS-JKlSqykgGT{Vgxv)ihtuAKDWA=ZC*Pe&nj<705`9D#9AklUO7dBBLmoOL-q$ zK~$`&nb(snTXsePh2wWWb3Z}eY1^OFZ8o5xhc^F%-6w`sb2Y#Go7&AJ&Y{7E@QPJ_ z=e+EE^1x>vBiGGdkTL4?rw{d4Cl%qH4=N>ljiD`-CtbCC4z9QQJd|?Nw;CDn`o?@@ z{|Pra)bT!Xl~$TIiGeVoI+=Nv34q!FK)s?#3j(!rLZIGEVw@6U=J6>xw&>Dj D zk}?x)dxpxi_v2ToGO>89tHQSNzwT~YlQx)Ao_xoz=}Fu%!7{kqs|MHKUwJDXI5wJf z4xFVRAy9)dvw8+gSZx8I8Wd@#a{dV5Vj#vc4!kaa>I+w{B-hVo`(zGOrMKJmlf6gx zkVEaQS~MlyqU|Vn6$2`*ngFm?!({_^_N3YMvlr5WNsW940K@Dh0`&IDeKJ5Y3POn$ z>UVd)*1*gsy#3d;HE==Ia pTo jnGlO{cr~;2FMq3PUB *jZ&dI?|ID)bvhqPORP1$a!k(QVMaZI)eIJYhb;>h50o`5d`_#8Ds{&_uc4%` zAS!Q2lW0LchnHE~v_059I8-vg!XR|L8Cn5{S5b4bbYBf=E1p{_c^6%aj9TDvmo%uA ztVbz-11iPLt+E>U9 69jVHb8O$4cFN?v8 zY0>jTSWQroTbS+133Df_o87Q;-L>MmrA`i2dX_OKKXQ0eG8dF)J;AaWy#|l`_wk-j z-8=^?@CM0l8~5AH8hhaO JU5V=so`}%`3kg+kH8f?!l9B5 z)*h(5j6bWG!y6Z@UI6O=cmJfjfx4bd!i{;uSvU>5?^AD?h$+2r0W91tw?2a#55^F? z$;BlRSSPsWM;+05u$+-NYXyMi=1@t8YaI#hZ;?rj1;_2SK!fqbsS}sb;nZ=_BDhoS zdZks%^!XxaL^UMElSvG0*yC=6#<4|Wy 0pt;Gpj)jJuS!Z50 I9uz6pOYASC3Ng#IyewU;r_>dblMr RRLTGV002ovPDHLkV1i58z$5?w literal 2033 zcmXw32{=@38$L6b>}!@8gNd@0EQ8FT=0p50VPeQfmeNm=Xi~C|FhetALY4_dDkM7% zk? HKLn+M18EqrDo4d|`$3WWNzG_YBpuu) zRxyb?`Oh}FGUz5;4K%D0gR2wt(IC;j117Kq}4I0MVfT%;fF-L$KVh7?hB@@s lc2-XzsVPO6thKSVAxhQ)B2o7{^VkcY znkU|=-?yAt`5N;kW#Ahdh*WedA$EQpxZC<5qwDF3EJvTp@Uf+dg7;NIamUUUUK#v0 zqL*n05JiBSl2MI}um)PmaP70fN;u6(j%LIfYdR3Ck=I|kw6U_VzU*HUZIS0bvpV-= zpuC)2Z pL0b+H98q*#=lRka@JH+ zEjZi1TwervmECHc?54NpaCUzA)kH6Dd_SIUbL&+?X4f+m eE8AB19iDeV;X@J?c04O!8=IHh@sEf|;`Ka??r-1;0@ zRl04ptCThE6$KOMRv!4du^BQOApXOVZ|qe)$3k2Z0C+8}E&d|h_DEwp1tG1(VG|NA zYU$qp>hT9qmyBL|( m;IGrteIT*<@9-awbeEzGrAkfc; zv3{{IaB8Tq84{DK%3-`Qj?mkVzGw#fEH>17Ap`x%l59bOnJYc(B3) >;hRX9k&}%jWgqoh{N9 z&slyJ=4 k8`k2ULP5*$$IEU*zJAp{+8_$f-r`x`ywKMPU-)a zy*A0%^KJ7kD6S&vDm#3ktnuA{Gcw-vno!yuJRJ+&xya1OJ#=YXXvwN>l&tBdYZw~- zg0nMicx}RUTwAY;^f*Os-b(ad#ENZcNy(5q^s<>aOt_V3-J3)_zG9ij+v+5TQ$?j2 z1SM})y5o-MoHojRwMaZ(T}^;qBv%T^m?6rMQx @1XI7zQ2hmF+Q*qPx~s(ntr!s}OC2l4r7q@xvtdZfG&QL%}@UO!-UGzTZ* z0B!fy@YjGLJ(YQkjs>_d>l>WWC}|tIyza#1o(RX;sd*lke?7cle%X@Z6!Z&a^!eea z<+;ZX0x{Uh4w&C_$sh&w+!p6f>lS<8= ABcN Pg+%*W1B0im z%73P`O@1)rzfBx@bm+u{B-|@XrHC-9NlG~9aq01s#k0aj5&aJ?oF5#GNlSNC5wD=} zkz{9ukU9F!+MF3-tAKb>lq7tWM_Y)sH1lntU?XVWOcgJtBLf+K_mWt_%E7hi8p<_f zUJdmmCZlZ^NOCEyF6xDndYd 6XMpLd(KQ^9+~-y_T#4Fcip%CZ&> zp5%79m$=UKs%cjqPGhlLLWi3RLt@^x `zq@cQT5Z*m>ElG(F`w5$VrCwky(OX&SFIi7jJ%wPVezw3z*cR`G zH*_F(QWVcr=;d`-hS*1S{xFa9A-&^2E4A6v>~?Lqx_<&Sywn^wC)NYCm(V?fQlA-* zaU_e_h}tka@q^v>%fD*u#tM@uN^@C;Y6g*)?1lEAeX(Ql`qQbt;NJ_dK5b`FYUXw4 Ef2Y!o00000 From 5cfde743ca370029426ace95692e61b48d5f2717 Mon Sep 17 00:00:00 2001 From: Masaki Ozawa Date: Wed, 25 Nov 2015 20:41:56 +0900 Subject: [PATCH 3/6] add before render --- lib/hooks/backlog/hook.rb | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/lib/hooks/backlog/hook.rb b/lib/hooks/backlog/hook.rb index f548514..ab34fa3 100644 --- a/lib/hooks/backlog/hook.rb +++ b/lib/hooks/backlog/hook.rb @@ -6,12 +6,18 @@ class Backlog < Base helper Helper + before_render do + skip_processing! unless type + end + private def type case payload.type when 1, 2, 3, 4, 14, 17 'issue' + else + nil end end From e317175731fcea4eaa2b5dd1101db216242c5f38 Mon Sep 17 00:00:00 2001 From: Masaki Ozawa Date: Wed, 25 Nov 2015 20:42:28 +0900 Subject: [PATCH 4/6] add type error spec --- spec/backlog_spec.rb | 76 +++++++------------ spec/fixtures/payload/backlog/type_error.json | 22 ++++++ 2 files changed, 49 insertions(+), 49 deletions(-) create mode 100644 spec/fixtures/payload/backlog/type_error.json diff --git a/spec/backlog_spec.rb b/spec/backlog_spec.rb index 8377f95..78d18e1 100644 --- a/spec/backlog_spec.rb +++ b/spec/backlog_spec.rb @@ -4,6 +4,18 @@ describe '#process_payload' do subject { hook.process_payload } + context 'on type error' do + let(:payload_type) { 'type_error' } + + before do + post payload, 'Content-Type' => 'application/json' + end + + subject { ->{ hook.process_payload } } + + it { expect(subject).to raise_error(Idobata::Hook::SkipProcessing) } + end + context 'on issue create without space_id' do let(:payload_type) { 'issue_create' } @@ -13,7 +25,7 @@ its([:source]) { should eq(<<-HTML.strip_heredoc) } - test issue + test issue created by ozamasa.
test description
@@ -31,11 +43,8 @@ its([:source]) { should eq(<<-HTML.strip_heredoc) }- test issue + test issue created by ozamasa. -
- https://test.backlog.jp/view/TEST-100 -
test description
HTML @@ -52,11 +61,8 @@ its([:source]) { should eq(<<-HTML.strip_heredoc) }- test issue + test issue updated by ozamasa. -
- https://test.backlog.jp/view/TEST-100#comment-200 -
HTML @@ -73,32 +79,8 @@ its([:source]) { should eq(<<-HTML.strip_heredoc) }- test issue - commented by ozamasa. -
- https://test.backlog.jp/view/TEST-100#comment-200 -
-test comment
- - HTML - - its([:format]) { should eq(:html) } - end - - context 'on issue comment' do - let(:payload_type) { 'issue_comment' } - - before do - post payload, {'Content-Type' => 'application/json'}, {space_id: 'test'} - end - - its([:source]) { should eq(<<-HTML.strip_heredoc) } -- test issue + test issue commented by ozamasa. -
- https://test.backlog.jp/view/TEST-100#comment-200 -
test comment
HTML @@ -115,11 +97,8 @@ its([:source]) { should eq(<<-HTML.strip_heredoc) }- + TEST-100 issue deleted by ozamasa. -
- https://test.backlog.jp/view/TEST-100 -
HTML @@ -135,14 +114,16 @@ its([:source]) { should eq(<<-HTML.strip_heredoc) }- + multiple issues updated by ozamasa. -
- https://test.backlog.jp/view/TEST-100 -
-- https://test.backlog.jp/view/TEST-101 -
+ HTML @@ -158,11 +139,8 @@ its([:source]) { should eq(<<-HTML.strip_heredoc) }- test issue + test issue noticed by ozamasa. -
- https://test.backlog.jp/view/TEST-100#comment-200 -
test comment
HTML diff --git a/spec/fixtures/payload/backlog/type_error.json b/spec/fixtures/payload/backlog/type_error.json new file mode 100644 index 0000000..9a6122a --- /dev/null +++ b/spec/fixtures/payload/backlog/type_error.json @@ -0,0 +1,22 @@ +{ + "created":"2015-11-24T00:00:00Z", + "project":{ + "archived":false, + "projectKey":"TEST", + "name":"TestProject", + "chartEnabled":false, + "id":100, + "subtaskingEnabled":false + }, + "id":10, + "type":9999, + "notifications":[], + "createdUser":{ + "name":"ozamasa", + "mailAddress":null, + "id":6336, + "roleType":1, + "lang":"ja", + "userId":null + } +} From d288e1f6e7e92573edf7f68c56d68adb8ad181a4 Mon Sep 17 00:00:00 2001 From: Masaki OzawaDate: Wed, 25 Nov 2015 21:49:46 +0900 Subject: [PATCH 5/6] change template --- lib/hooks/backlog/helper.rb | 30 ++++++++++++--------- lib/hooks/backlog/templates/issue.html.haml | 14 +++++++--- 2 files changed, 28 insertions(+), 16 deletions(-) diff --git a/lib/hooks/backlog/helper.rb b/lib/hooks/backlog/helper.rb index 81cb006..d3a1216 100644 --- a/lib/hooks/backlog/helper.rb +++ b/lib/hooks/backlog/helper.rb @@ -20,27 +20,33 @@ def type_label end def backlog_url_base - "https://#{space_id}.backlog.jp/view/#{payload.project.projectKey}" if space_id + "https://#{space_id}.backlog.jp/view/" if space_id + end + + def backlog_url + if backlog_url_base && payload.content.key_id && payload.content.summary + url = "#{backlog_url_base}#{project_key_id}" + url += "#comment-#{payload.content.comment.id}" if payload.content.comment.try(:id) + end + url end def backlog_urls urls = [] - if backlog_url_base - if payload.content.key_id - url = "#{backlog_url_base}-#{payload.content.key_id}" - url += "#comment-#{payload.content.comment.id}" if payload.content.comment && payload.content.comment.id - urls << url - else - payload.content.link.each do |link| - urls << "#{backlog_url_base}-#{link.key_id}" if link.key_id - end + if backlog_url_base && payload.content.link + payload.content.link.each do |link| + urls << "#{backlog_url_base}#{payload.project.projectKey}-#{link.key_id}" if link.key_id end end urls end - def md(source) - HTML::Pipeline::MarkdownFilter.new(source, gfm: true).call.to_s.html_safe + def project_key_id + "#{payload.project.projectKey}-#{payload.content.key_id}" if payload.content.key_id + end + + def summary + payload.content.summary || project_key_id end def hbr(source) diff --git a/lib/hooks/backlog/templates/issue.html.haml b/lib/hooks/backlog/templates/issue.html.haml index 5385163..9e6782c 100644 --- a/lib/hooks/backlog/templates/issue.html.haml +++ b/lib/hooks/backlog/templates/issue.html.haml @@ -1,10 +1,16 @@ %p - %b= payload.content.summary + - if backlog_url && summary + %a{href: backlog_url}= summary + - else + = summary + #{type_label} by #{payload.createdUser.name}. - - backlog_urls.each do |url| - %p - %a{href: url}= url + - if backlog_urls.size > 1 + %ul + - backlog_urls.each do |url| + %li + %a{href: url}= url - if payload.type == 1 %p=hbr payload.content.description From 3088a6d2ab66c5103e60fffaf5d835dec3292549 Mon Sep 17 00:00:00 2001 From: Masaki Ozawa Date: Thu, 26 Nov 2015 13:11:49 +0900 Subject: [PATCH 6/6] change backlog issue web hook --- lib/hooks/backlog/help.html.haml | 2 ++ lib/hooks/backlog/helper.rb | 29 +++++++------------ lib/hooks/backlog/templates/issue.html.haml | 13 +++------ spec/backlog_spec.rb | 12 +++----- ...update.json => issue_multiple_update.json} | 0 5 files changed, 20 insertions(+), 36 deletions(-) rename spec/fixtures/payload/backlog/{issue_multipul_update.json => issue_multiple_update.json} (100%) diff --git a/lib/hooks/backlog/help.html.haml b/lib/hooks/backlog/help.html.haml index a75c4ae..3e8e7f4 100644 --- a/lib/hooks/backlog/help.html.haml +++ b/lib/hooks/backlog/help.html.haml @@ -5,5 +5,7 @@ You can add webhook URL to your team in backlog. %br See Webhook | Backlog for more details. + %br + Support the events of issue for now. %p Please append space_id
parameter as below. %pre {{endpoint}}?space_id=hogehoge
diff --git a/lib/hooks/backlog/helper.rb b/lib/hooks/backlog/helper.rb index d3a1216..e95529f 100644 --- a/lib/hooks/backlog/helper.rb +++ b/lib/hooks/backlog/helper.rb @@ -23,30 +23,21 @@ def backlog_url_base "https://#{space_id}.backlog.jp/view/" if space_id end - def backlog_url - if backlog_url_base && payload.content.key_id && payload.content.summary - url = "#{backlog_url_base}#{project_key_id}" - url += "#comment-#{payload.content.comment.id}" if payload.content.comment.try(:id) - end - url - end + def issue_link(summary, key_id, comment=nil) + issue_key = "#{payload.project.projectKey}-#{key_id}" if key_id - def backlog_urls - urls = [] - if backlog_url_base && payload.content.link - payload.content.link.each do |link| - urls << "#{backlog_url_base}#{payload.project.projectKey}-#{link.key_id}" if link.key_id - end + if backlog_url_base && issue_key + url = "#{backlog_url_base}#{issue_key}" + url += "#comment-#{comment.id}" if comment.try(:id) + + anker = render_as_haml("%a{href: url}= summary", url: url, summary: summary) if summary end - urls - end - def project_key_id - "#{payload.project.projectKey}-#{payload.content.key_id}" if payload.content.key_id + anker || summary || issue_key end - def summary - payload.content.summary || project_key_id + def render_as_haml(haml, locals) + Haml::Engine.new(haml, escape_html: true).render(self, locals) end def hbr(source) diff --git a/lib/hooks/backlog/templates/issue.html.haml b/lib/hooks/backlog/templates/issue.html.haml index 9e6782c..5d029aa 100644 --- a/lib/hooks/backlog/templates/issue.html.haml +++ b/lib/hooks/backlog/templates/issue.html.haml @@ -1,16 +1,11 @@ %p - - if backlog_url && summary - %a{href: backlog_url}= summary - - else - = summary - + = issue_link payload.content.summary, payload.content.key_id, payload.content.comment #{type_label} by #{payload.createdUser.name}. - - if backlog_urls.size > 1 + - if payload.content.link %ul - - backlog_urls.each do |url| - %li - %a{href: url}= url + - payload.content.link.each do |link| + %li= issue_link link.title, link.key_id - if payload.type == 1 %p=hbr payload.content.description diff --git a/spec/backlog_spec.rb b/spec/backlog_spec.rb index 78d18e1..d71314a 100644 --- a/spec/backlog_spec.rb +++ b/spec/backlog_spec.rb @@ -105,8 +105,8 @@ its([:format]) { should eq(:html) } end - context 'on issue multipul update' do - let(:payload_type) { 'issue_multipul_update' } + context 'on issue multiple update' do + let(:payload_type) { 'issue_multiple_update' } before do post payload, {'Content-Type' => 'application/json'}, {space_id: 'test'} @@ -117,12 +117,8 @@ multiple issues updated by ozamasa. HTML diff --git a/spec/fixtures/payload/backlog/issue_multipul_update.json b/spec/fixtures/payload/backlog/issue_multiple_update.json similarity index 100% rename from spec/fixtures/payload/backlog/issue_multipul_update.json rename to spec/fixtures/payload/backlog/issue_multiple_update.json