API - add uuid to activity and return it instead of id to client - #57
This commit is contained in:
parent
6f627ef6c9
commit
3af845f18c
@ -162,7 +162,7 @@
|
||||
<span class="nt">"descent"</span><span class="p">:</span> <span class="kc">null</span><span class="p">,</span>
|
||||
<span class="nt">"distance"</span><span class="p">:</span> <span class="mf">10.0</span><span class="p">,</span>
|
||||
<span class="nt">"duration"</span><span class="p">:</span> <span class="s2">"0:17:04"</span><span class="p">,</span>
|
||||
<span class="nt">"id"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
|
||||
<span class="nt">"id"</span><span class="p">:</span> <span class="s2">"f03265f69fe0489b812fc7dc4deff55e"</span><span class="p">,</span>
|
||||
<span class="nt">"map"</span><span class="p">:</span> <span class="kc">null</span><span class="p">,</span>
|
||||
<span class="nt">"max_alt"</span><span class="p">:</span> <span class="kc">null</span><span class="p">,</span>
|
||||
<span class="nt">"max_speed"</span><span class="p">:</span> <span class="mf">10.0</span><span class="p">,</span>
|
||||
@ -176,7 +176,7 @@
|
||||
<span class="nt">"records"</span><span class="p">:</span> <span class="p">[</span>
|
||||
<span class="p">{</span>
|
||||
<span class="nt">"activity_date"</span><span class="p">:</span> <span class="s2">"Mon, 01 Jan 2018 00:00:00 GMT"</span><span class="p">,</span>
|
||||
<span class="nt">"activity_id"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
|
||||
<span class="nt">"activity_id"</span><span class="p">:</span> <span class="s2">"f03265f69fe0489b812fc7dc4deff55e"</span><span class="p">,</span>
|
||||
<span class="nt">"id"</span><span class="p">:</span> <span class="mi">4</span><span class="p">,</span>
|
||||
<span class="nt">"record_type"</span><span class="p">:</span> <span class="s2">"MS"</span><span class="p">,</span>
|
||||
<span class="nt">"sport_id"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
|
||||
@ -185,7 +185,7 @@
|
||||
<span class="p">},</span>
|
||||
<span class="p">{</span>
|
||||
<span class="nt">"activity_date"</span><span class="p">:</span> <span class="s2">"Mon, 01 Jan 2018 00:00:00 GMT"</span><span class="p">,</span>
|
||||
<span class="nt">"activity_id"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
|
||||
<span class="nt">"activity_id"</span><span class="p">:</span> <span class="s2">"f03265f69fe0489b812fc7dc4deff55e"</span><span class="p">,</span>
|
||||
<span class="nt">"id"</span><span class="p">:</span> <span class="mi">3</span><span class="p">,</span>
|
||||
<span class="nt">"record_type"</span><span class="p">:</span> <span class="s2">"LD"</span><span class="p">,</span>
|
||||
<span class="nt">"sport_id"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
|
||||
@ -194,7 +194,7 @@
|
||||
<span class="p">},</span>
|
||||
<span class="p">{</span>
|
||||
<span class="nt">"activity_date"</span><span class="p">:</span> <span class="s2">"Mon, 01 Jan 2018 00:00:00 GMT"</span><span class="p">,</span>
|
||||
<span class="nt">"activity_id"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
|
||||
<span class="nt">"activity_id"</span><span class="p">:</span> <span class="s2">"f03265f69fe0489b812fc7dc4deff55e"</span><span class="p">,</span>
|
||||
<span class="nt">"id"</span><span class="p">:</span> <span class="mi">2</span><span class="p">,</span>
|
||||
<span class="nt">"record_type"</span><span class="p">:</span> <span class="s2">"FD"</span><span class="p">,</span>
|
||||
<span class="nt">"sport_id"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
|
||||
@ -203,7 +203,7 @@
|
||||
<span class="p">},</span>
|
||||
<span class="p">{</span>
|
||||
<span class="nt">"activity_date"</span><span class="p">:</span> <span class="s2">"Mon, 01 Jan 2018 00:00:00 GMT"</span><span class="p">,</span>
|
||||
<span class="nt">"activity_id"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
|
||||
<span class="nt">"activity_id"</span><span class="p">:</span> <span class="s2">"f03265f69fe0489b812fc7dc4deff55e"</span><span class="p">,</span>
|
||||
<span class="nt">"id"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
|
||||
<span class="nt">"record_type"</span><span class="p">:</span> <span class="s2">"AS"</span><span class="p">,</span>
|
||||
<span class="nt">"sport_id"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
|
||||
@ -285,11 +285,11 @@
|
||||
</dd></dl>
|
||||
|
||||
<dl class="http get">
|
||||
<dt id="get--api-activities-(int-activity_id)">
|
||||
<code class="sig-name descname">GET </code><code class="sig-name descname">/api/activities/</code><span class="sig-paren">(</span><em class="property">int: </em><em class="sig-param">activity_id</em><span class="sig-paren">)</span><a class="headerlink" href="#get--api-activities-(int-activity_id)" title="Permalink to this definition">¶</a></dt>
|
||||
<dt id="get--api-activities-(string-activity_uuid)">
|
||||
<code class="sig-name descname">GET </code><code class="sig-name descname">/api/activities/</code><span class="sig-paren">(</span><em class="property">string: </em><em class="sig-param">activity_uuid</em><span class="sig-paren">)</span><a class="headerlink" href="#get--api-activities-(string-activity_uuid)" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Get an activity</p>
|
||||
<p><strong>Example request</strong>:</p>
|
||||
<div class="highlight-http notranslate"><div class="highlight"><pre><span></span><span class="nf">GET</span> <span class="nn">/api/activities/3</span> <span class="kr">HTTP</span><span class="o">/</span><span class="m">1.1</span>
|
||||
<div class="highlight-http notranslate"><div class="highlight"><pre><span></span><span class="nf">GET</span> <span class="nn">/api/activities/f03265f69fe0489b812fc7dc4deff55e</span> <span class="kr">HTTP</span><span class="o">/</span><span class="m">1.1</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<p><strong>Example responses</strong>:</p>
|
||||
@ -311,7 +311,7 @@
|
||||
<span class="nt">"descent"</span><span class="p">:</span> <span class="kc">null</span><span class="p">,</span>
|
||||
<span class="nt">"distance"</span><span class="p">:</span> <span class="mi">12</span><span class="p">,</span>
|
||||
<span class="nt">"duration"</span><span class="p">:</span> <span class="s2">"0:45:00"</span><span class="p">,</span>
|
||||
<span class="nt">"id"</span><span class="p">:</span> <span class="mi">3</span><span class="p">,</span>
|
||||
<span class="nt">"id"</span><span class="p">:</span> <span class="s2">"f03265f69fe0489b812fc7dc4deff55e"</span><span class="p">,</span>
|
||||
<span class="nt">"map"</span><span class="p">:</span> <span class="kc">null</span><span class="p">,</span>
|
||||
<span class="nt">"max_alt"</span><span class="p">:</span> <span class="kc">null</span><span class="p">,</span>
|
||||
<span class="nt">"max_speed"</span><span class="p">:</span> <span class="mi">16</span><span class="p">,</span>
|
||||
@ -355,7 +355,7 @@
|
||||
<dt class="field-odd">Parameters</dt>
|
||||
<dd class="field-odd"><ul class="simple">
|
||||
<li><p><strong>auth_user_id</strong> (<em>integer</em>) – authenticate user id (from JSON Web Token)</p></li>
|
||||
<li><p><strong>activity_id</strong> (<em>integer</em>) – activity id</p></li>
|
||||
<li><p><strong>activity_uuid</strong> (<em>integer</em>) – activity uuid</p></li>
|
||||
</ul>
|
||||
</dd>
|
||||
<dt class="field-even">Request Headers</dt>
|
||||
@ -380,11 +380,11 @@
|
||||
</dd></dl>
|
||||
|
||||
<dl class="http get">
|
||||
<dt id="get--api-activities-(int-activity_id)-gpx">
|
||||
<code class="sig-name descname">GET </code><code class="sig-name descname">/api/activities/</code><span class="sig-paren">(</span><em class="property">int: </em><em class="sig-param">activity_id</em><span class="sig-paren">)</span><code class="sig-name descname">/gpx</code><a class="headerlink" href="#get--api-activities-(int-activity_id)-gpx" title="Permalink to this definition">¶</a></dt>
|
||||
<dt id="get--api-activities-(string-activity_uuid)-gpx">
|
||||
<code class="sig-name descname">GET </code><code class="sig-name descname">/api/activities/</code><span class="sig-paren">(</span><em class="property">string: </em><em class="sig-param">activity_uuid</em><span class="sig-paren">)</span><code class="sig-name descname">/gpx</code><a class="headerlink" href="#get--api-activities-(string-activity_uuid)-gpx" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Get gpx file for an activity displayed on map with Leaflet</p>
|
||||
<p><strong>Example request</strong>:</p>
|
||||
<div class="highlight-http notranslate"><div class="highlight"><pre><span></span><span class="nf">GET</span> <span class="nn">/api/activities/3/gpx</span> <span class="kr">HTTP</span><span class="o">/</span><span class="m">1.1</span>
|
||||
<div class="highlight-http notranslate"><div class="highlight"><pre><span></span><span class="nf">GET</span> <span class="nn">/api/activities/f03265f69fe0489b812fc7dc4deff55e/gpx</span> <span class="kr">HTTP</span><span class="o">/</span><span class="m">1.1</span>
|
||||
<span class="na">Content-Type</span><span class="o">:</span> <span class="l">application/json</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
@ -405,7 +405,7 @@
|
||||
<dt class="field-odd">Parameters</dt>
|
||||
<dd class="field-odd"><ul class="simple">
|
||||
<li><p><strong>auth_user_id</strong> (<em>integer</em>) – authenticate user id (from JSON Web Token)</p></li>
|
||||
<li><p><strong>activity_id</strong> (<em>integer</em>) – activity id</p></li>
|
||||
<li><p><strong>activity_uuid</strong> (<em>integer</em>) – activity uuid</p></li>
|
||||
</ul>
|
||||
</dd>
|
||||
<dt class="field-even">Request Headers</dt>
|
||||
@ -434,11 +434,11 @@
|
||||
</dd></dl>
|
||||
|
||||
<dl class="http get">
|
||||
<dt id="get--api-activities-(int-activity_id)-chart_data">
|
||||
<code class="sig-name descname">GET </code><code class="sig-name descname">/api/activities/</code><span class="sig-paren">(</span><em class="property">int: </em><em class="sig-param">activity_id</em><span class="sig-paren">)</span><code class="sig-name descname">/chart_data</code><a class="headerlink" href="#get--api-activities-(int-activity_id)-chart_data" title="Permalink to this definition">¶</a></dt>
|
||||
<dt id="get--api-activities-(string-activity_uuid)-chart_data">
|
||||
<code class="sig-name descname">GET </code><code class="sig-name descname">/api/activities/</code><span class="sig-paren">(</span><em class="property">string: </em><em class="sig-param">activity_uuid</em><span class="sig-paren">)</span><code class="sig-name descname">/chart_data</code><a class="headerlink" href="#get--api-activities-(string-activity_uuid)-chart_data" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Get chart data from an activity gpx file, to display it with Recharts</p>
|
||||
<p><strong>Example request</strong>:</p>
|
||||
<div class="highlight-http notranslate"><div class="highlight"><pre><span></span><span class="nf">GET</span> <span class="nn">/api/activities/3/chart</span> <span class="kr">HTTP</span><span class="o">/</span><span class="m">1.1</span>
|
||||
<div class="highlight-http notranslate"><div class="highlight"><pre><span></span><span class="nf">GET</span> <span class="nn">/api/activities/f03265f69fe0489b812fc7dc4deff55e/chart</span> <span class="kr">HTTP</span><span class="o">/</span><span class="m">1.1</span>
|
||||
<span class="na">Content-Type</span><span class="o">:</span> <span class="l">application/json</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
@ -478,7 +478,7 @@
|
||||
<dt class="field-odd">Parameters</dt>
|
||||
<dd class="field-odd"><ul class="simple">
|
||||
<li><p><strong>auth_user_id</strong> (<em>integer</em>) – authenticate user id (from JSON Web Token)</p></li>
|
||||
<li><p><strong>activity_id</strong> (<em>integer</em>) – activity id</p></li>
|
||||
<li><p><strong>activity_uuid</strong> (<em>integer</em>) – activity uuid</p></li>
|
||||
</ul>
|
||||
</dd>
|
||||
<dt class="field-even">Request Headers</dt>
|
||||
@ -507,11 +507,12 @@
|
||||
</dd></dl>
|
||||
|
||||
<dl class="http get">
|
||||
<dt id="get--api-activities-(int-activity_id)-chart_data-segment-(int-segment_id)">
|
||||
<code class="sig-name descname">GET </code><code class="sig-name descname">/api/activities/</code><span class="sig-paren">(</span><em class="property">int: </em><em class="sig-param">activity_id</em><span class="sig-paren">)</span><code class="sig-name descname">/chart_data/segment/</code><span class="sig-paren">(</span><em class="property">int: </em><em class="sig-param">segment_id</em><span class="sig-paren">)</span><a class="headerlink" href="#get--api-activities-(int-activity_id)-chart_data-segment-(int-segment_id)" title="Permalink to this definition">¶</a></dt>
|
||||
<dt id="get--api-activities-(string-activity_uuid)-chart_data-segment-(int-segment_id)">
|
||||
<code class="sig-name descname">GET </code><code class="sig-name descname">/api/activities/</code><span class="sig-paren">(</span><em class="property">string: </em><em class="sig-param">activity_uuid</em><span class="sig-paren">)</span><code class="sig-name descname">/chart_data/segment/</code><span class="sig-paren">(</span><em class="property">int: </em><em class="sig-param">segment_id</em><span class="sig-paren">)</span><a class="headerlink" href="#get--api-activities-(string-activity_uuid)-chart_data-segment-(int-segment_id)" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Get chart data from an activity gpx file, to display it with Recharts</p>
|
||||
<p><strong>Example request</strong>:</p>
|
||||
<div class="highlight-http notranslate"><div class="highlight"><pre><span></span><span class="nf">GET</span> <span class="nn">/api/activities/3/chart/segment/0</span> <span class="kr">HTTP</span><span class="o">/</span><span class="m">1.1</span>
|
||||
<div class="highlight-http notranslate"><div class="highlight"><pre><span></span><span class="nf">GET</span> <span class="nn">/api/activities/f03265f69fe0489b812fc7dc4deff55e/chart/segment/0</span>
|
||||
<span class="kr">HTTP</span><span class="o">/</span><span class="m">1.1</span>
|
||||
<span class="na">Content-Type</span><span class="o">:</span> <span class="l">application/json</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
@ -551,7 +552,7 @@
|
||||
<dt class="field-odd">Parameters</dt>
|
||||
<dd class="field-odd"><ul class="simple">
|
||||
<li><p><strong>auth_user_id</strong> (<em>integer</em>) – authenticate user id (from JSON Web Token)</p></li>
|
||||
<li><p><strong>activity_id</strong> (<em>integer</em>) – activity id</p></li>
|
||||
<li><p><strong>activity_uuid</strong> (<em>integer</em>) – activity uuid</p></li>
|
||||
<li><p><strong>segment_id</strong> (<em>integer</em>) – segment id</p></li>
|
||||
</ul>
|
||||
</dd>
|
||||
@ -578,11 +579,12 @@
|
||||
</dd></dl>
|
||||
|
||||
<dl class="http get">
|
||||
<dt id="get--api-activities-(int-activity_id)-gpx-segment-(int-segment_id)">
|
||||
<code class="sig-name descname">GET </code><code class="sig-name descname">/api/activities/</code><span class="sig-paren">(</span><em class="property">int: </em><em class="sig-param">activity_id</em><span class="sig-paren">)</span><code class="sig-name descname">/gpx/segment/</code><span class="sig-paren">(</span><em class="property">int: </em><em class="sig-param">segment_id</em><span class="sig-paren">)</span><a class="headerlink" href="#get--api-activities-(int-activity_id)-gpx-segment-(int-segment_id)" title="Permalink to this definition">¶</a></dt>
|
||||
<dt id="get--api-activities-(string-activity_uuid)-gpx-segment-(int-segment_id)">
|
||||
<code class="sig-name descname">GET </code><code class="sig-name descname">/api/activities/</code><span class="sig-paren">(</span><em class="property">string: </em><em class="sig-param">activity_uuid</em><span class="sig-paren">)</span><code class="sig-name descname">/gpx/segment/</code><span class="sig-paren">(</span><em class="property">int: </em><em class="sig-param">segment_id</em><span class="sig-paren">)</span><a class="headerlink" href="#get--api-activities-(string-activity_uuid)-gpx-segment-(int-segment_id)" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Get gpx file for an activity segment displayed on map with Leaflet</p>
|
||||
<p><strong>Example request</strong>:</p>
|
||||
<div class="highlight-http notranslate"><div class="highlight"><pre><span></span><span class="nf">GET</span> <span class="nn">/api/activities/3/gpx/segment/0</span> <span class="kr">HTTP</span><span class="o">/</span><span class="m">1.1</span>
|
||||
<div class="highlight-http notranslate"><div class="highlight"><pre><span></span><span class="nf">GET</span> <span class="nn">/api/activities/f03265f69fe0489b812fc7dc4deff55e/gpx/segment/0</span>
|
||||
<span class="kr">HTTP</span><span class="o">/</span><span class="m">1.1</span>
|
||||
<span class="na">Content-Type</span><span class="o">:</span> <span class="l">application/json</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
@ -603,7 +605,7 @@
|
||||
<dt class="field-odd">Parameters</dt>
|
||||
<dd class="field-odd"><ul class="simple">
|
||||
<li><p><strong>auth_user_id</strong> (<em>integer</em>) – authenticate user id (from JSON Web Token)</p></li>
|
||||
<li><p><strong>activity_id</strong> (<em>integer</em>) – activity id</p></li>
|
||||
<li><p><strong>activity_uuid</strong> (<em>integer</em>) – activity uuid</p></li>
|
||||
<li><p><strong>segment_id</strong> (<em>integer</em>) – segment id</p></li>
|
||||
</ul>
|
||||
</dd>
|
||||
@ -716,7 +718,7 @@
|
||||
<span class="nt">"descent"</span><span class="p">:</span> <span class="kc">null</span><span class="p">,</span>
|
||||
<span class="nt">"distance"</span><span class="p">:</span> <span class="mf">10.0</span><span class="p">,</span>
|
||||
<span class="nt">"duration"</span><span class="p">:</span> <span class="s2">"0:17:04"</span><span class="p">,</span>
|
||||
<span class="nt">"id"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
|
||||
<span class="nt">"id"</span><span class="p">:</span> <span class="s2">"f03265f69fe0489b812fc7dc4deff55e"</span><span class="p">,</span>
|
||||
<span class="nt">"map"</span><span class="p">:</span> <span class="kc">null</span><span class="p">,</span>
|
||||
<span class="nt">"max_alt"</span><span class="p">:</span> <span class="kc">null</span><span class="p">,</span>
|
||||
<span class="nt">"max_speed"</span><span class="p">:</span> <span class="mf">10.0</span><span class="p">,</span>
|
||||
@ -730,7 +732,7 @@
|
||||
<span class="nt">"records"</span><span class="p">:</span> <span class="p">[</span>
|
||||
<span class="p">{</span>
|
||||
<span class="nt">"activity_date"</span><span class="p">:</span> <span class="s2">"Mon, 01 Jan 2018 00:00:00 GMT"</span><span class="p">,</span>
|
||||
<span class="nt">"activity_id"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
|
||||
<span class="nt">"activity_id"</span><span class="p">:</span> <span class="s2">"f03265f69fe0489b812fc7dc4deff55e"</span><span class="p">,</span>
|
||||
<span class="nt">"id"</span><span class="p">:</span> <span class="mi">4</span><span class="p">,</span>
|
||||
<span class="nt">"record_type"</span><span class="p">:</span> <span class="s2">"MS"</span><span class="p">,</span>
|
||||
<span class="nt">"sport_id"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
|
||||
@ -739,7 +741,7 @@
|
||||
<span class="p">},</span>
|
||||
<span class="p">{</span>
|
||||
<span class="nt">"activity_date"</span><span class="p">:</span> <span class="s2">"Mon, 01 Jan 2018 00:00:00 GMT"</span><span class="p">,</span>
|
||||
<span class="nt">"activity_id"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
|
||||
<span class="nt">"activity_id"</span><span class="p">:</span> <span class="s2">"f03265f69fe0489b812fc7dc4deff55e"</span><span class="p">,</span>
|
||||
<span class="nt">"id"</span><span class="p">:</span> <span class="mi">3</span><span class="p">,</span>
|
||||
<span class="nt">"record_type"</span><span class="p">:</span> <span class="s2">"LD"</span><span class="p">,</span>
|
||||
<span class="nt">"sport_id"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
|
||||
@ -748,7 +750,7 @@
|
||||
<span class="p">},</span>
|
||||
<span class="p">{</span>
|
||||
<span class="nt">"activity_date"</span><span class="p">:</span> <span class="s2">"Mon, 01 Jan 2018 00:00:00 GMT"</span><span class="p">,</span>
|
||||
<span class="nt">"activity_id"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
|
||||
<span class="nt">"activity_id"</span><span class="p">:</span> <span class="s2">"f03265f69fe0489b812fc7dc4deff55e"</span><span class="p">,</span>
|
||||
<span class="nt">"id"</span><span class="p">:</span> <span class="mi">2</span><span class="p">,</span>
|
||||
<span class="nt">"record_type"</span><span class="p">:</span> <span class="s2">"FD"</span><span class="p">,</span>
|
||||
<span class="nt">"sport_id"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
|
||||
@ -757,7 +759,7 @@
|
||||
<span class="p">},</span>
|
||||
<span class="p">{</span>
|
||||
<span class="nt">"activity_date"</span><span class="p">:</span> <span class="s2">"Mon, 01 Jan 2018 00:00:00 GMT"</span><span class="p">,</span>
|
||||
<span class="nt">"activity_id"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
|
||||
<span class="nt">"activity_id"</span><span class="p">:</span> <span class="s2">"f03265f69fe0489b812fc7dc4deff55e"</span><span class="p">,</span>
|
||||
<span class="nt">"id"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
|
||||
<span class="nt">"record_type"</span><span class="p">:</span> <span class="s2">"AS"</span><span class="p">,</span>
|
||||
<span class="nt">"sport_id"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
|
||||
@ -844,7 +846,6 @@
|
||||
<span class="nt">"descent"</span><span class="p">:</span> <span class="kc">null</span><span class="p">,</span>
|
||||
<span class="nt">"distance"</span><span class="p">:</span> <span class="mf">10.0</span><span class="p">,</span>
|
||||
<span class="nt">"duration"</span><span class="p">:</span> <span class="s2">"0:17:04"</span><span class="p">,</span>
|
||||
<span class="nt">"id"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
|
||||
<span class="nt">"map"</span><span class="p">:</span> <span class="kc">null</span><span class="p">,</span>
|
||||
<span class="nt">"max_alt"</span><span class="p">:</span> <span class="kc">null</span><span class="p">,</span>
|
||||
<span class="nt">"max_speed"</span><span class="p">:</span> <span class="mf">10.0</span><span class="p">,</span>
|
||||
@ -858,7 +859,7 @@
|
||||
<span class="nt">"records"</span><span class="p">:</span> <span class="p">[</span>
|
||||
<span class="p">{</span>
|
||||
<span class="nt">"activity_date"</span><span class="p">:</span> <span class="s2">"Mon, 01 Jan 2018 00:00:00 GMT"</span><span class="p">,</span>
|
||||
<span class="nt">"activity_id"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
|
||||
<span class="nt">"activity_id"</span><span class="p">:</span> <span class="s2">"f03265f69fe0489b812fc7dc4deff55e"</span><span class="p">,</span>
|
||||
<span class="nt">"id"</span><span class="p">:</span> <span class="mi">4</span><span class="p">,</span>
|
||||
<span class="nt">"record_type"</span><span class="p">:</span> <span class="s2">"MS"</span><span class="p">,</span>
|
||||
<span class="nt">"sport_id"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
|
||||
@ -867,7 +868,7 @@
|
||||
<span class="p">},</span>
|
||||
<span class="p">{</span>
|
||||
<span class="nt">"activity_date"</span><span class="p">:</span> <span class="s2">"Mon, 01 Jan 2018 00:00:00 GMT"</span><span class="p">,</span>
|
||||
<span class="nt">"activity_id"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
|
||||
<span class="nt">"activity_id"</span><span class="p">:</span> <span class="s2">"f03265f69fe0489b812fc7dc4deff55e"</span><span class="p">,</span>
|
||||
<span class="nt">"id"</span><span class="p">:</span> <span class="mi">3</span><span class="p">,</span>
|
||||
<span class="nt">"record_type"</span><span class="p">:</span> <span class="s2">"LD"</span><span class="p">,</span>
|
||||
<span class="nt">"sport_id"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
|
||||
@ -876,7 +877,7 @@
|
||||
<span class="p">},</span>
|
||||
<span class="p">{</span>
|
||||
<span class="nt">"activity_date"</span><span class="p">:</span> <span class="s2">"Mon, 01 Jan 2018 00:00:00 GMT"</span><span class="p">,</span>
|
||||
<span class="nt">"activity_id"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
|
||||
<span class="nt">"activity_id"</span><span class="p">:</span> <span class="s2">"f03265f69fe0489b812fc7dc4deff55e"</span><span class="p">,</span>
|
||||
<span class="nt">"id"</span><span class="p">:</span> <span class="mi">2</span><span class="p">,</span>
|
||||
<span class="nt">"record_type"</span><span class="p">:</span> <span class="s2">"FD"</span><span class="p">,</span>
|
||||
<span class="nt">"sport_id"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
|
||||
@ -885,7 +886,7 @@
|
||||
<span class="p">},</span>
|
||||
<span class="p">{</span>
|
||||
<span class="nt">"activity_date"</span><span class="p">:</span> <span class="s2">"Mon, 01 Jan 2018 00:00:00 GMT"</span><span class="p">,</span>
|
||||
<span class="nt">"activity_id"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
|
||||
<span class="nt">"activity_id"</span><span class="p">:</span> <span class="s2">"f03265f69fe0489b812fc7dc4deff55e"</span><span class="p">,</span>
|
||||
<span class="nt">"id"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
|
||||
<span class="nt">"record_type"</span><span class="p">:</span> <span class="s2">"AS"</span><span class="p">,</span>
|
||||
<span class="nt">"sport_id"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
|
||||
@ -897,6 +898,7 @@
|
||||
<span class="nt">"sport_id"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
|
||||
<span class="nt">"title"</span><span class="p">:</span> <span class="kc">null</span><span class="p">,</span>
|
||||
<span class="nt">"user"</span><span class="p">:</span> <span class="s2">"admin"</span><span class="p">,</span>
|
||||
<span class="nt">"uuid"</span><span class="p">:</span> <span class="nt">"f03265f69fe0489b812fc7dc4deff55e"</span>
|
||||
<span class="nt">"weather_end"</span><span class="p">:</span> <span class="kc">null</span><span class="p">,</span>
|
||||
<span class="nt">"weather_start"</span><span class="p">:</span> <span class="kc">null</span><span class="p">,</span>
|
||||
<span class="nt">"with_gpx"</span><span class="p">:</span> <span class="kc">false</span>
|
||||
@ -945,8 +947,8 @@
|
||||
</dd></dl>
|
||||
|
||||
<dl class="http patch">
|
||||
<dt id="patch--api-activities-(int-activity_id)">
|
||||
<code class="sig-name descname">PATCH </code><code class="sig-name descname">/api/activities/</code><span class="sig-paren">(</span><em class="property">int: </em><em class="sig-param">activity_id</em><span class="sig-paren">)</span><a class="headerlink" href="#patch--api-activities-(int-activity_id)" title="Permalink to this definition">¶</a></dt>
|
||||
<dt id="patch--api-activities-(string-activity_uuid)">
|
||||
<code class="sig-name descname">PATCH </code><code class="sig-name descname">/api/activities/</code><span class="sig-paren">(</span><em class="property">string: </em><em class="sig-param">activity_uuid</em><span class="sig-paren">)</span><a class="headerlink" href="#patch--api-activities-(string-activity_uuid)" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Update an activity</p>
|
||||
<p><strong>Example request</strong>:</p>
|
||||
<div class="highlight-http notranslate"><div class="highlight"><pre><span></span><span class="nf">PATCH</span> <span class="nn">/api/activities/1</span> <span class="kr">HTTP</span><span class="o">/</span><span class="m">1.1</span>
|
||||
@ -969,7 +971,6 @@
|
||||
<span class="nt">"descent"</span><span class="p">:</span> <span class="kc">null</span><span class="p">,</span>
|
||||
<span class="nt">"distance"</span><span class="p">:</span> <span class="mf">10.0</span><span class="p">,</span>
|
||||
<span class="nt">"duration"</span><span class="p">:</span> <span class="s2">"0:17:04"</span><span class="p">,</span>
|
||||
<span class="nt">"id"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
|
||||
<span class="nt">"map"</span><span class="p">:</span> <span class="kc">null</span><span class="p">,</span>
|
||||
<span class="nt">"max_alt"</span><span class="p">:</span> <span class="kc">null</span><span class="p">,</span>
|
||||
<span class="nt">"max_speed"</span><span class="p">:</span> <span class="mf">10.0</span><span class="p">,</span>
|
||||
@ -983,7 +984,7 @@
|
||||
<span class="nt">"records"</span><span class="p">:</span> <span class="p">[</span>
|
||||
<span class="p">{</span>
|
||||
<span class="nt">"activity_date"</span><span class="p">:</span> <span class="s2">"Mon, 01 Jan 2018 00:00:00 GMT"</span><span class="p">,</span>
|
||||
<span class="nt">"activity_id"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
|
||||
<span class="nt">"activity_id"</span><span class="p">:</span> <span class="s2">"f03265f69fe0489b812fc7dc4deff55e"</span><span class="p">,</span>
|
||||
<span class="nt">"id"</span><span class="p">:</span> <span class="mi">4</span><span class="p">,</span>
|
||||
<span class="nt">"record_type"</span><span class="p">:</span> <span class="s2">"MS"</span><span class="p">,</span>
|
||||
<span class="nt">"sport_id"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
|
||||
@ -992,7 +993,7 @@
|
||||
<span class="p">},</span>
|
||||
<span class="p">{</span>
|
||||
<span class="nt">"activity_date"</span><span class="p">:</span> <span class="s2">"Mon, 01 Jan 2018 00:00:00 GMT"</span><span class="p">,</span>
|
||||
<span class="nt">"activity_id"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
|
||||
<span class="nt">"activity_id"</span><span class="p">:</span> <span class="s2">"f03265f69fe0489b812fc7dc4deff55e"</span><span class="p">,</span>
|
||||
<span class="nt">"id"</span><span class="p">:</span> <span class="mi">3</span><span class="p">,</span>
|
||||
<span class="nt">"record_type"</span><span class="p">:</span> <span class="s2">"LD"</span><span class="p">,</span>
|
||||
<span class="nt">"sport_id"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
|
||||
@ -1001,7 +1002,7 @@
|
||||
<span class="p">},</span>
|
||||
<span class="p">{</span>
|
||||
<span class="nt">"activity_date"</span><span class="p">:</span> <span class="s2">"Mon, 01 Jan 2018 00:00:00 GMT"</span><span class="p">,</span>
|
||||
<span class="nt">"activity_id"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
|
||||
<span class="nt">"activity_id"</span><span class="p">:</span> <span class="s2">"f03265f69fe0489b812fc7dc4deff55e"</span><span class="p">,</span>
|
||||
<span class="nt">"id"</span><span class="p">:</span> <span class="mi">2</span><span class="p">,</span>
|
||||
<span class="nt">"record_type"</span><span class="p">:</span> <span class="s2">"FD"</span><span class="p">,</span>
|
||||
<span class="nt">"sport_id"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
|
||||
@ -1010,7 +1011,7 @@
|
||||
<span class="p">},</span>
|
||||
<span class="p">{</span>
|
||||
<span class="nt">"activity_date"</span><span class="p">:</span> <span class="s2">"Mon, 01 Jan 2018 00:00:00 GMT"</span><span class="p">,</span>
|
||||
<span class="nt">"activity_id"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
|
||||
<span class="nt">"activity_id"</span><span class="p">:</span> <span class="s2">"f03265f69fe0489b812fc7dc4deff55e"</span><span class="p">,</span>
|
||||
<span class="nt">"id"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
|
||||
<span class="nt">"record_type"</span><span class="p">:</span> <span class="s2">"AS"</span><span class="p">,</span>
|
||||
<span class="nt">"sport_id"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
|
||||
@ -1022,6 +1023,7 @@
|
||||
<span class="nt">"sport_id"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
|
||||
<span class="nt">"title"</span><span class="p">:</span> <span class="kc">null</span><span class="p">,</span>
|
||||
<span class="nt">"user"</span><span class="p">:</span> <span class="s2">"admin"</span><span class="p">,</span>
|
||||
<span class="nt">"uuid"</span><span class="p">:</span> <span class="nt">"f03265f69fe0489b812fc7dc4deff55e"</span>
|
||||
<span class="nt">"weather_end"</span><span class="p">:</span> <span class="kc">null</span><span class="p">,</span>
|
||||
<span class="nt">"weather_start"</span><span class="p">:</span> <span class="kc">null</span><span class="p">,</span>
|
||||
<span class="nt">"with_gpx"</span><span class="p">:</span> <span class="kc">false</span>
|
||||
@ -1036,7 +1038,7 @@
|
||||
<dt class="field-odd">Parameters</dt>
|
||||
<dd class="field-odd"><ul class="simple">
|
||||
<li><p><strong>auth_user_id</strong> (<em>integer</em>) – authenticate user id (from JSON Web Token)</p></li>
|
||||
<li><p><strong>activity_id</strong> (<em>integer</em>) – activity id</p></li>
|
||||
<li><p><strong>activity_uuid</strong> (<em>integer</em>) – activity uuid</p></li>
|
||||
</ul>
|
||||
</dd>
|
||||
<dt class="field-even">Request JSON Object</dt>
|
||||
@ -1075,11 +1077,11 @@
|
||||
</dd></dl>
|
||||
|
||||
<dl class="http delete">
|
||||
<dt id="delete--api-activities-(int-activity_id)">
|
||||
<code class="sig-name descname">DELETE </code><code class="sig-name descname">/api/activities/</code><span class="sig-paren">(</span><em class="property">int: </em><em class="sig-param">activity_id</em><span class="sig-paren">)</span><a class="headerlink" href="#delete--api-activities-(int-activity_id)" title="Permalink to this definition">¶</a></dt>
|
||||
<dt id="delete--api-activities-(string-activity_uuid)">
|
||||
<code class="sig-name descname">DELETE </code><code class="sig-name descname">/api/activities/</code><span class="sig-paren">(</span><em class="property">string: </em><em class="sig-param">activity_uuid</em><span class="sig-paren">)</span><a class="headerlink" href="#delete--api-activities-(string-activity_uuid)" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Delete an activity</p>
|
||||
<p><strong>Example request</strong>:</p>
|
||||
<div class="highlight-http notranslate"><div class="highlight"><pre><span></span><span class="nf">DELETE</span> <span class="nn">/api/activities/1</span> <span class="kr">HTTP</span><span class="o">/</span><span class="m">1.1</span>
|
||||
<div class="highlight-http notranslate"><div class="highlight"><pre><span></span><span class="nf">DELETE</span> <span class="nn">/api/activities/f03265f69fe0489b812fc7dc4deff55e</span> <span class="kr">HTTP</span><span class="o">/</span><span class="m">1.1</span>
|
||||
<span class="na">Content-Type</span><span class="o">:</span> <span class="l">application/json</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
@ -1092,7 +1094,7 @@
|
||||
<dt class="field-odd">Parameters</dt>
|
||||
<dd class="field-odd"><ul class="simple">
|
||||
<li><p><strong>auth_user_id</strong> (<em>integer</em>) – authenticate user id (from JSON Web Token)</p></li>
|
||||
<li><p><strong>activity_id</strong> (<em>integer</em>) – activity id</p></li>
|
||||
<li><p><strong>activity_uuid</strong> (<em>integer</em>) – activity uuid</p></li>
|
||||
</ul>
|
||||
</dd>
|
||||
<dt class="field-even">Request Headers</dt>
|
||||
|
@ -156,7 +156,7 @@
|
||||
<span class="nt">"records"</span><span class="p">:</span> <span class="p">[</span>
|
||||
<span class="p">{</span>
|
||||
<span class="nt">"activity_date"</span><span class="p">:</span> <span class="s2">"Sun, 07 Jul 2019 08:00:00 GMT"</span><span class="p">,</span>
|
||||
<span class="nt">"activity_id"</span><span class="p">:</span> <span class="mi">4</span><span class="p">,</span>
|
||||
<span class="nt">"activity_id"</span><span class="p">:</span> <span class="s2">"e060bde05e3f4906a32913b102c814cb"</span><span class="p">,</span>
|
||||
<span class="nt">"id"</span><span class="p">:</span> <span class="mi">9</span><span class="p">,</span>
|
||||
<span class="nt">"record_type"</span><span class="p">:</span> <span class="s2">"AS"</span><span class="p">,</span>
|
||||
<span class="nt">"sport_id"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
|
||||
@ -165,7 +165,7 @@
|
||||
<span class="p">},</span>
|
||||
<span class="p">{</span>
|
||||
<span class="nt">"activity_date"</span><span class="p">:</span> <span class="s2">"Sun, 07 Jul 2019 08:00:00 GMT"</span><span class="p">,</span>
|
||||
<span class="nt">"activity_id"</span><span class="p">:</span> <span class="mi">4</span><span class="p">,</span>
|
||||
<span class="nt">"activity_id"</span><span class="p">:</span> <span class="s2">"e060bde05e3f4906a32913b102c814cb"</span><span class="p">,</span>
|
||||
<span class="nt">"id"</span><span class="p">:</span> <span class="mi">10</span><span class="p">,</span>
|
||||
<span class="nt">"record_type"</span><span class="p">:</span> <span class="s2">"FD"</span><span class="p">,</span>
|
||||
<span class="nt">"sport_id"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
|
||||
@ -174,7 +174,7 @@
|
||||
<span class="p">},</span>
|
||||
<span class="p">{</span>
|
||||
<span class="nt">"activity_date"</span><span class="p">:</span> <span class="s2">"Sun, 07 Jul 2019 08:00:00 GMT"</span><span class="p">,</span>
|
||||
<span class="nt">"activity_id"</span><span class="p">:</span> <span class="mi">7</span><span class="p">,</span>
|
||||
<span class="nt">"activity_id"</span><span class="p">:</span> <span class="s2">"e060bde05e3f4906a32913b102c814cb"</span><span class="p">,</span>
|
||||
<span class="nt">"id"</span><span class="p">:</span> <span class="mi">11</span><span class="p">,</span>
|
||||
<span class="nt">"record_type"</span><span class="p">:</span> <span class="s2">"LD"</span><span class="p">,</span>
|
||||
<span class="nt">"sport_id"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
|
||||
@ -183,7 +183,7 @@
|
||||
<span class="p">},</span>
|
||||
<span class="p">{</span>
|
||||
<span class="nt">"activity_date"</span><span class="p">:</span> <span class="s2">"Sun, 07 Jul 2019 08:00:00 GMT"</span><span class="p">,</span>
|
||||
<span class="nt">"activity_id"</span><span class="p">:</span> <span class="mi">4</span><span class="p">,</span>
|
||||
<span class="nt">"activity_id"</span><span class="p">:</span> <span class="s2">"e060bde05e3f4906a32913b102c814cb"</span><span class="p">,</span>
|
||||
<span class="nt">"id"</span><span class="p">:</span> <span class="mi">12</span><span class="p">,</span>
|
||||
<span class="nt">"record_type"</span><span class="p">:</span> <span class="s2">"MS"</span><span class="p">,</span>
|
||||
<span class="nt">"sport_id"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
|
||||
|
@ -133,27 +133,27 @@
|
||||
<tr>
|
||||
<td></td>
|
||||
<td>
|
||||
<a href="api/activities.html#get--api-activities-(int-activity_id)"><code class="xref">GET /api/activities/(int:activity_id)</code></a></td><td>
|
||||
<a href="api/activities.html#get--api-activities-(string-activity_uuid)"><code class="xref">GET /api/activities/(string:activity_uuid)</code></a></td><td>
|
||||
<em></em></td></tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
<td>
|
||||
<a href="api/activities.html#get--api-activities-(int-activity_id)-chart_data"><code class="xref">GET /api/activities/(int:activity_id)/chart_data</code></a></td><td>
|
||||
<a href="api/activities.html#get--api-activities-(string-activity_uuid)-chart_data"><code class="xref">GET /api/activities/(string:activity_uuid)/chart_data</code></a></td><td>
|
||||
<em></em></td></tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
<td>
|
||||
<a href="api/activities.html#get--api-activities-(int-activity_id)-chart_data-segment-(int-segment_id)"><code class="xref">GET /api/activities/(int:activity_id)/chart_data/segment/(int:segment_id)</code></a></td><td>
|
||||
<a href="api/activities.html#get--api-activities-(string-activity_uuid)-chart_data-segment-(int-segment_id)"><code class="xref">GET /api/activities/(string:activity_uuid)/chart_data/segment/(int:segment_id)</code></a></td><td>
|
||||
<em></em></td></tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
<td>
|
||||
<a href="api/activities.html#get--api-activities-(int-activity_id)-gpx"><code class="xref">GET /api/activities/(int:activity_id)/gpx</code></a></td><td>
|
||||
<a href="api/activities.html#get--api-activities-(string-activity_uuid)-gpx"><code class="xref">GET /api/activities/(string:activity_uuid)/gpx</code></a></td><td>
|
||||
<em></em></td></tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
<td>
|
||||
<a href="api/activities.html#get--api-activities-(int-activity_id)-gpx-segment-(int-segment_id)"><code class="xref">GET /api/activities/(int:activity_id)/gpx/segment/(int:segment_id)</code></a></td><td>
|
||||
<a href="api/activities.html#get--api-activities-(string-activity_uuid)-gpx-segment-(int-segment_id)"><code class="xref">GET /api/activities/(string:activity_uuid)/gpx/segment/(int:segment_id)</code></a></td><td>
|
||||
<em></em></td></tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
@ -273,7 +273,7 @@
|
||||
<tr>
|
||||
<td></td>
|
||||
<td>
|
||||
<a href="api/activities.html#delete--api-activities-(int-activity_id)"><code class="xref">DELETE /api/activities/(int:activity_id)</code></a></td><td>
|
||||
<a href="api/activities.html#delete--api-activities-(string-activity_uuid)"><code class="xref">DELETE /api/activities/(string:activity_uuid)</code></a></td><td>
|
||||
<em></em></td></tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
@ -288,7 +288,7 @@
|
||||
<tr>
|
||||
<td></td>
|
||||
<td>
|
||||
<a href="api/activities.html#patch--api-activities-(int-activity_id)"><code class="xref">PATCH /api/activities/(int:activity_id)</code></a></td><td>
|
||||
<a href="api/activities.html#patch--api-activities-(string-activity_uuid)"><code class="xref">PATCH /api/activities/(string:activity_uuid)</code></a></td><td>
|
||||
<em></em></td></tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
|
BIN
docs/objects.inv
BIN
docs/objects.inv
Binary file not shown.
File diff suppressed because one or more lines are too long
@ -76,7 +76,7 @@ def get_activities(auth_user_id):
|
||||
"descent": null,
|
||||
"distance": 10.0,
|
||||
"duration": "0:17:04",
|
||||
"id": 1,
|
||||
"id": "f03265f69fe0489b812fc7dc4deff55e",
|
||||
"map": null,
|
||||
"max_alt": null,
|
||||
"max_speed": 10.0,
|
||||
@ -90,7 +90,7 @@ def get_activities(auth_user_id):
|
||||
"records": [
|
||||
{
|
||||
"activity_date": "Mon, 01 Jan 2018 00:00:00 GMT",
|
||||
"activity_id": 1,
|
||||
"activity_id": "f03265f69fe0489b812fc7dc4deff55e",
|
||||
"id": 4,
|
||||
"record_type": "MS",
|
||||
"sport_id": 1,
|
||||
@ -99,7 +99,7 @@ def get_activities(auth_user_id):
|
||||
},
|
||||
{
|
||||
"activity_date": "Mon, 01 Jan 2018 00:00:00 GMT",
|
||||
"activity_id": 1,
|
||||
"activity_id": "f03265f69fe0489b812fc7dc4deff55e",
|
||||
"id": 3,
|
||||
"record_type": "LD",
|
||||
"sport_id": 1,
|
||||
@ -108,7 +108,7 @@ def get_activities(auth_user_id):
|
||||
},
|
||||
{
|
||||
"activity_date": "Mon, 01 Jan 2018 00:00:00 GMT",
|
||||
"activity_id": 1,
|
||||
"activity_id": "f03265f69fe0489b812fc7dc4deff55e",
|
||||
"id": 2,
|
||||
"record_type": "FD",
|
||||
"sport_id": 1,
|
||||
@ -117,7 +117,7 @@ def get_activities(auth_user_id):
|
||||
},
|
||||
{
|
||||
"activity_date": "Mon, 01 Jan 2018 00:00:00 GMT",
|
||||
"activity_id": 1,
|
||||
"activity_id": "f03265f69fe0489b812fc7dc4deff55e",
|
||||
"id": 1,
|
||||
"record_type": "AS",
|
||||
"sport_id": 1,
|
||||
@ -269,9 +269,11 @@ def get_activities(auth_user_id):
|
||||
return jsonify(response_object), code
|
||||
|
||||
|
||||
@activities_blueprint.route('/activities/<int:activity_id>', methods=['GET'])
|
||||
@activities_blueprint.route(
|
||||
'/activities/<string:activity_uuid>', methods=['GET']
|
||||
)
|
||||
@authenticate
|
||||
def get_activity(auth_user_id, activity_id):
|
||||
def get_activity(auth_user_id, activity_uuid):
|
||||
"""
|
||||
Get an activity
|
||||
|
||||
@ -279,7 +281,7 @@ def get_activity(auth_user_id, activity_id):
|
||||
|
||||
.. sourcecode:: http
|
||||
|
||||
GET /api/activities/3 HTTP/1.1
|
||||
GET /api/activities/f03265f69fe0489b812fc7dc4deff55e HTTP/1.1
|
||||
|
||||
**Example responses**:
|
||||
|
||||
@ -302,7 +304,7 @@ def get_activity(auth_user_id, activity_id):
|
||||
"descent": null,
|
||||
"distance": 12,
|
||||
"duration": "0:45:00",
|
||||
"id": 3,
|
||||
"id": "f03265f69fe0489b812fc7dc4deff55e",
|
||||
"map": null,
|
||||
"max_alt": null,
|
||||
"max_speed": 16,
|
||||
@ -342,7 +344,7 @@ def get_activity(auth_user_id, activity_id):
|
||||
}
|
||||
|
||||
:param integer auth_user_id: authenticate user id (from JSON Web Token)
|
||||
:param integer activity_id: activity id
|
||||
:param integer activity_uuid: activity uuid
|
||||
|
||||
:reqheader Authorization: OAuth 2.0 Bearer Token
|
||||
|
||||
@ -355,7 +357,7 @@ def get_activity(auth_user_id, activity_id):
|
||||
:statuscode 404: activity not found
|
||||
|
||||
"""
|
||||
activity = Activity.query.filter_by(id=activity_id).first()
|
||||
activity = Activity.query.filter_by(uuid=activity_uuid).first()
|
||||
activities_list = []
|
||||
|
||||
if activity:
|
||||
@ -379,9 +381,9 @@ def get_activity(auth_user_id, activity_id):
|
||||
return jsonify(response_object), code
|
||||
|
||||
|
||||
def get_activity_data(auth_user_id, activity_id, data_type, segment_id=None):
|
||||
def get_activity_data(auth_user_id, activity_uuid, data_type, segment_id=None):
|
||||
"""Get data from an activity gpx file"""
|
||||
activity = Activity.query.filter_by(id=activity_id).first()
|
||||
activity = Activity.query.filter_by(uuid=activity_uuid).first()
|
||||
content = ''
|
||||
if activity:
|
||||
response_object, code = can_view_activity(
|
||||
@ -390,7 +392,7 @@ def get_activity_data(auth_user_id, activity_id, data_type, segment_id=None):
|
||||
if response_object:
|
||||
return jsonify(response_object), code
|
||||
if not activity.gpx or activity.gpx == '':
|
||||
message = f'No gpx file for this activity (id: {activity_id})'
|
||||
message = f'No gpx file for this activity (id: {activity_uuid})'
|
||||
response_object = {'status': 'error', 'message': message}
|
||||
return jsonify(response_object), 404
|
||||
|
||||
@ -420,7 +422,7 @@ def get_activity_data(auth_user_id, activity_id, data_type, segment_id=None):
|
||||
code = 200
|
||||
else:
|
||||
status = 'not found'
|
||||
message = f'Activity not found (id: {activity_id})'
|
||||
message = f'Activity not found (id: {activity_uuid})'
|
||||
code = 404
|
||||
|
||||
response_object = {
|
||||
@ -436,10 +438,10 @@ def get_activity_data(auth_user_id, activity_id, data_type, segment_id=None):
|
||||
|
||||
|
||||
@activities_blueprint.route(
|
||||
'/activities/<int:activity_id>/gpx', methods=['GET']
|
||||
'/activities/<string:activity_uuid>/gpx', methods=['GET']
|
||||
)
|
||||
@authenticate
|
||||
def get_activity_gpx(auth_user_id, activity_id):
|
||||
def get_activity_gpx(auth_user_id, activity_uuid):
|
||||
"""
|
||||
Get gpx file for an activity displayed on map with Leaflet
|
||||
|
||||
@ -447,7 +449,7 @@ def get_activity_gpx(auth_user_id, activity_id):
|
||||
|
||||
.. sourcecode:: http
|
||||
|
||||
GET /api/activities/3/gpx HTTP/1.1
|
||||
GET /api/activities/f03265f69fe0489b812fc7dc4deff55e/gpx HTTP/1.1
|
||||
Content-Type: application/json
|
||||
|
||||
**Example response**:
|
||||
@ -466,7 +468,7 @@ def get_activity_gpx(auth_user_id, activity_id):
|
||||
}
|
||||
|
||||
:param integer auth_user_id: authenticate user id (from JSON Web Token)
|
||||
:param integer activity_id: activity id
|
||||
:param integer activity_uuid: activity uuid
|
||||
|
||||
:reqheader Authorization: OAuth 2.0 Bearer Token
|
||||
|
||||
@ -481,14 +483,14 @@ def get_activity_gpx(auth_user_id, activity_id):
|
||||
:statuscode 500:
|
||||
|
||||
"""
|
||||
return get_activity_data(auth_user_id, activity_id, 'gpx')
|
||||
return get_activity_data(auth_user_id, activity_uuid, 'gpx')
|
||||
|
||||
|
||||
@activities_blueprint.route(
|
||||
'/activities/<int:activity_id>/chart_data', methods=['GET']
|
||||
'/activities/<string:activity_uuid>/chart_data', methods=['GET']
|
||||
)
|
||||
@authenticate
|
||||
def get_activity_chart_data(auth_user_id, activity_id):
|
||||
def get_activity_chart_data(auth_user_id, activity_uuid):
|
||||
"""
|
||||
Get chart data from an activity gpx file, to display it with Recharts
|
||||
|
||||
@ -496,7 +498,7 @@ def get_activity_chart_data(auth_user_id, activity_id):
|
||||
|
||||
.. sourcecode:: http
|
||||
|
||||
GET /api/activities/3/chart HTTP/1.1
|
||||
GET /api/activities/f03265f69fe0489b812fc7dc4deff55e/chart HTTP/1.1
|
||||
Content-Type: application/json
|
||||
|
||||
**Example response**:
|
||||
@ -534,7 +536,7 @@ def get_activity_chart_data(auth_user_id, activity_id):
|
||||
}
|
||||
|
||||
:param integer auth_user_id: authenticate user id (from JSON Web Token)
|
||||
:param integer activity_id: activity id
|
||||
:param integer activity_uuid: activity uuid
|
||||
|
||||
:reqheader Authorization: OAuth 2.0 Bearer Token
|
||||
|
||||
@ -549,15 +551,15 @@ def get_activity_chart_data(auth_user_id, activity_id):
|
||||
:statuscode 500:
|
||||
|
||||
"""
|
||||
return get_activity_data(auth_user_id, activity_id, 'chart')
|
||||
return get_activity_data(auth_user_id, activity_uuid, 'chart')
|
||||
|
||||
|
||||
@activities_blueprint.route(
|
||||
'/activities/<int:activity_id>/gpx/segment/<int:segment_id>',
|
||||
'/activities/<string:activity_uuid>/gpx/segment/<int:segment_id>',
|
||||
methods=['GET'],
|
||||
)
|
||||
@authenticate
|
||||
def get_segment_gpx(auth_user_id, activity_id, segment_id):
|
||||
def get_segment_gpx(auth_user_id, activity_uuid, segment_id):
|
||||
"""
|
||||
Get gpx file for an activity segment displayed on map with Leaflet
|
||||
|
||||
@ -565,7 +567,8 @@ def get_segment_gpx(auth_user_id, activity_id, segment_id):
|
||||
|
||||
.. sourcecode:: http
|
||||
|
||||
GET /api/activities/3/gpx/segment/0 HTTP/1.1
|
||||
GET /api/activities/f03265f69fe0489b812fc7dc4deff55e/gpx/segment/0
|
||||
HTTP/1.1
|
||||
Content-Type: application/json
|
||||
|
||||
**Example response**:
|
||||
@ -584,7 +587,7 @@ def get_segment_gpx(auth_user_id, activity_id, segment_id):
|
||||
}
|
||||
|
||||
:param integer auth_user_id: authenticate user id (from JSON Web Token)
|
||||
:param integer activity_id: activity id
|
||||
:param integer activity_uuid: activity uuid
|
||||
:param integer segment_id: segment id
|
||||
|
||||
:reqheader Authorization: OAuth 2.0 Bearer Token
|
||||
@ -599,15 +602,15 @@ def get_segment_gpx(auth_user_id, activity_id, segment_id):
|
||||
:statuscode 500:
|
||||
|
||||
"""
|
||||
return get_activity_data(auth_user_id, activity_id, 'gpx', segment_id)
|
||||
return get_activity_data(auth_user_id, activity_uuid, 'gpx', segment_id)
|
||||
|
||||
|
||||
@activities_blueprint.route(
|
||||
'/activities/<int:activity_id>/chart_data/segment/<int:segment_id>',
|
||||
'/activities/<string:activity_uuid>/chart_data/segment/<int:segment_id>',
|
||||
methods=['GET'],
|
||||
)
|
||||
@authenticate
|
||||
def get_segment_chart_data(auth_user_id, activity_id, segment_id):
|
||||
def get_segment_chart_data(auth_user_id, activity_uuid, segment_id):
|
||||
"""
|
||||
Get chart data from an activity gpx file, to display it with Recharts
|
||||
|
||||
@ -615,7 +618,8 @@ def get_segment_chart_data(auth_user_id, activity_id, segment_id):
|
||||
|
||||
.. sourcecode:: http
|
||||
|
||||
GET /api/activities/3/chart/segment/0 HTTP/1.1
|
||||
GET /api/activities/f03265f69fe0489b812fc7dc4deff55e/chart/segment/0
|
||||
HTTP/1.1
|
||||
Content-Type: application/json
|
||||
|
||||
**Example response**:
|
||||
@ -653,7 +657,7 @@ def get_segment_chart_data(auth_user_id, activity_id, segment_id):
|
||||
}
|
||||
|
||||
:param integer auth_user_id: authenticate user id (from JSON Web Token)
|
||||
:param integer activity_id: activity id
|
||||
:param integer activity_uuid: activity uuid
|
||||
:param integer segment_id: segment id
|
||||
|
||||
:reqheader Authorization: OAuth 2.0 Bearer Token
|
||||
@ -668,7 +672,7 @@ def get_segment_chart_data(auth_user_id, activity_id, segment_id):
|
||||
:statuscode 500:
|
||||
|
||||
"""
|
||||
return get_activity_data(auth_user_id, activity_id, 'chart', segment_id)
|
||||
return get_activity_data(auth_user_id, activity_uuid, 'chart', segment_id)
|
||||
|
||||
|
||||
@activities_blueprint.route('/activities/map/<map_id>', methods=['GET'])
|
||||
@ -790,7 +794,7 @@ def post_activity(auth_user_id):
|
||||
"descent": null,
|
||||
"distance": 10.0,
|
||||
"duration": "0:17:04",
|
||||
"id": 1,
|
||||
"id": "f03265f69fe0489b812fc7dc4deff55e",
|
||||
"map": null,
|
||||
"max_alt": null,
|
||||
"max_speed": 10.0,
|
||||
@ -804,7 +808,7 @@ def post_activity(auth_user_id):
|
||||
"records": [
|
||||
{
|
||||
"activity_date": "Mon, 01 Jan 2018 00:00:00 GMT",
|
||||
"activity_id": 1,
|
||||
"activity_id": "f03265f69fe0489b812fc7dc4deff55e",
|
||||
"id": 4,
|
||||
"record_type": "MS",
|
||||
"sport_id": 1,
|
||||
@ -813,7 +817,7 @@ def post_activity(auth_user_id):
|
||||
},
|
||||
{
|
||||
"activity_date": "Mon, 01 Jan 2018 00:00:00 GMT",
|
||||
"activity_id": 1,
|
||||
"activity_id": "f03265f69fe0489b812fc7dc4deff55e",
|
||||
"id": 3,
|
||||
"record_type": "LD",
|
||||
"sport_id": 1,
|
||||
@ -822,7 +826,7 @@ def post_activity(auth_user_id):
|
||||
},
|
||||
{
|
||||
"activity_date": "Mon, 01 Jan 2018 00:00:00 GMT",
|
||||
"activity_id": 1,
|
||||
"activity_id": "f03265f69fe0489b812fc7dc4deff55e",
|
||||
"id": 2,
|
||||
"record_type": "FD",
|
||||
"sport_id": 1,
|
||||
@ -831,7 +835,7 @@ def post_activity(auth_user_id):
|
||||
},
|
||||
{
|
||||
"activity_date": "Mon, 01 Jan 2018 00:00:00 GMT",
|
||||
"activity_id": 1,
|
||||
"activity_id": "f03265f69fe0489b812fc7dc4deff55e",
|
||||
"id": 1,
|
||||
"record_type": "AS",
|
||||
"sport_id": 1,
|
||||
@ -955,7 +959,6 @@ def post_activity_no_gpx(auth_user_id):
|
||||
"descent": null,
|
||||
"distance": 10.0,
|
||||
"duration": "0:17:04",
|
||||
"id": 1,
|
||||
"map": null,
|
||||
"max_alt": null,
|
||||
"max_speed": 10.0,
|
||||
@ -969,7 +972,7 @@ def post_activity_no_gpx(auth_user_id):
|
||||
"records": [
|
||||
{
|
||||
"activity_date": "Mon, 01 Jan 2018 00:00:00 GMT",
|
||||
"activity_id": 1,
|
||||
"activity_id": "f03265f69fe0489b812fc7dc4deff55e",
|
||||
"id": 4,
|
||||
"record_type": "MS",
|
||||
"sport_id": 1,
|
||||
@ -978,7 +981,7 @@ def post_activity_no_gpx(auth_user_id):
|
||||
},
|
||||
{
|
||||
"activity_date": "Mon, 01 Jan 2018 00:00:00 GMT",
|
||||
"activity_id": 1,
|
||||
"activity_id": "f03265f69fe0489b812fc7dc4deff55e",
|
||||
"id": 3,
|
||||
"record_type": "LD",
|
||||
"sport_id": 1,
|
||||
@ -987,7 +990,7 @@ def post_activity_no_gpx(auth_user_id):
|
||||
},
|
||||
{
|
||||
"activity_date": "Mon, 01 Jan 2018 00:00:00 GMT",
|
||||
"activity_id": 1,
|
||||
"activity_id": "f03265f69fe0489b812fc7dc4deff55e",
|
||||
"id": 2,
|
||||
"record_type": "FD",
|
||||
"sport_id": 1,
|
||||
@ -996,7 +999,7 @@ def post_activity_no_gpx(auth_user_id):
|
||||
},
|
||||
{
|
||||
"activity_date": "Mon, 01 Jan 2018 00:00:00 GMT",
|
||||
"activity_id": 1,
|
||||
"activity_id": "f03265f69fe0489b812fc7dc4deff55e",
|
||||
"id": 1,
|
||||
"record_type": "AS",
|
||||
"sport_id": 1,
|
||||
@ -1008,6 +1011,7 @@ def post_activity_no_gpx(auth_user_id):
|
||||
"sport_id": 1,
|
||||
"title": null,
|
||||
"user": "admin",
|
||||
"uuid": "f03265f69fe0489b812fc7dc4deff55e"
|
||||
"weather_end": null,
|
||||
"weather_start": null,
|
||||
"with_gpx": false
|
||||
@ -1070,9 +1074,11 @@ def post_activity_no_gpx(auth_user_id):
|
||||
return jsonify(response_object), 500
|
||||
|
||||
|
||||
@activities_blueprint.route('/activities/<int:activity_id>', methods=['PATCH'])
|
||||
@activities_blueprint.route(
|
||||
'/activities/<string:activity_uuid>', methods=['PATCH']
|
||||
)
|
||||
@authenticate
|
||||
def update_activity(auth_user_id, activity_id):
|
||||
def update_activity(auth_user_id, activity_uuid):
|
||||
"""
|
||||
Update an activity
|
||||
|
||||
@ -1102,7 +1108,6 @@ def update_activity(auth_user_id, activity_id):
|
||||
"descent": null,
|
||||
"distance": 10.0,
|
||||
"duration": "0:17:04",
|
||||
"id": 1,
|
||||
"map": null,
|
||||
"max_alt": null,
|
||||
"max_speed": 10.0,
|
||||
@ -1116,7 +1121,7 @@ def update_activity(auth_user_id, activity_id):
|
||||
"records": [
|
||||
{
|
||||
"activity_date": "Mon, 01 Jan 2018 00:00:00 GMT",
|
||||
"activity_id": 1,
|
||||
"activity_id": "f03265f69fe0489b812fc7dc4deff55e",
|
||||
"id": 4,
|
||||
"record_type": "MS",
|
||||
"sport_id": 1,
|
||||
@ -1125,7 +1130,7 @@ def update_activity(auth_user_id, activity_id):
|
||||
},
|
||||
{
|
||||
"activity_date": "Mon, 01 Jan 2018 00:00:00 GMT",
|
||||
"activity_id": 1,
|
||||
"activity_id": "f03265f69fe0489b812fc7dc4deff55e",
|
||||
"id": 3,
|
||||
"record_type": "LD",
|
||||
"sport_id": 1,
|
||||
@ -1134,7 +1139,7 @@ def update_activity(auth_user_id, activity_id):
|
||||
},
|
||||
{
|
||||
"activity_date": "Mon, 01 Jan 2018 00:00:00 GMT",
|
||||
"activity_id": 1,
|
||||
"activity_id": "f03265f69fe0489b812fc7dc4deff55e",
|
||||
"id": 2,
|
||||
"record_type": "FD",
|
||||
"sport_id": 1,
|
||||
@ -1143,7 +1148,7 @@ def update_activity(auth_user_id, activity_id):
|
||||
},
|
||||
{
|
||||
"activity_date": "Mon, 01 Jan 2018 00:00:00 GMT",
|
||||
"activity_id": 1,
|
||||
"activity_id": "f03265f69fe0489b812fc7dc4deff55e",
|
||||
"id": 1,
|
||||
"record_type": "AS",
|
||||
"sport_id": 1,
|
||||
@ -1155,6 +1160,7 @@ def update_activity(auth_user_id, activity_id):
|
||||
"sport_id": 1,
|
||||
"title": null,
|
||||
"user": "admin",
|
||||
"uuid": "f03265f69fe0489b812fc7dc4deff55e"
|
||||
"weather_end": null,
|
||||
"weather_start": null,
|
||||
"with_gpx": false
|
||||
@ -1165,7 +1171,7 @@ def update_activity(auth_user_id, activity_id):
|
||||
}
|
||||
|
||||
:param integer auth_user_id: authenticate user id (from JSON Web Token)
|
||||
:param integer activity_id: activity id
|
||||
:param integer activity_uuid: activity uuid
|
||||
|
||||
:<json string activity_date: activity date (format: ``%Y-%m-%d %H:%M``)
|
||||
(only for activity without gpx)
|
||||
@ -1195,7 +1201,7 @@ def update_activity(auth_user_id, activity_id):
|
||||
return jsonify(response_object), 400
|
||||
|
||||
try:
|
||||
activity = Activity.query.filter_by(id=activity_id).first()
|
||||
activity = Activity.query.filter_by(uuid=activity_uuid).first()
|
||||
if activity:
|
||||
response_object, code = can_view_activity(
|
||||
auth_user_id, activity.user_id
|
||||
@ -1228,10 +1234,10 @@ def update_activity(auth_user_id, activity_id):
|
||||
|
||||
|
||||
@activities_blueprint.route(
|
||||
'/activities/<int:activity_id>', methods=['DELETE']
|
||||
'/activities/<string:activity_uuid>', methods=['DELETE']
|
||||
)
|
||||
@authenticate
|
||||
def delete_activity(auth_user_id, activity_id):
|
||||
def delete_activity(auth_user_id, activity_uuid):
|
||||
"""
|
||||
Delete an activity
|
||||
|
||||
@ -1239,7 +1245,7 @@ def delete_activity(auth_user_id, activity_id):
|
||||
|
||||
.. sourcecode:: http
|
||||
|
||||
DELETE /api/activities/1 HTTP/1.1
|
||||
DELETE /api/activities/f03265f69fe0489b812fc7dc4deff55e HTTP/1.1
|
||||
Content-Type: application/json
|
||||
|
||||
**Example response**:
|
||||
@ -1250,7 +1256,7 @@ def delete_activity(auth_user_id, activity_id):
|
||||
Content-Type: application/json
|
||||
|
||||
:param integer auth_user_id: authenticate user id (from JSON Web Token)
|
||||
:param integer activity_id: activity id
|
||||
:param integer activity_uuid: activity uuid
|
||||
|
||||
:reqheader Authorization: OAuth 2.0 Bearer Token
|
||||
|
||||
@ -1265,7 +1271,7 @@ def delete_activity(auth_user_id, activity_id):
|
||||
"""
|
||||
|
||||
try:
|
||||
activity = Activity.query.filter_by(id=activity_id).first()
|
||||
activity = Activity.query.filter_by(uuid=activity_uuid).first()
|
||||
if activity:
|
||||
response_object, code = can_view_activity(
|
||||
auth_user_id, activity.user_id
|
||||
|
@ -1,5 +1,6 @@
|
||||
import datetime
|
||||
import os
|
||||
from uuid import uuid4
|
||||
|
||||
from fittrackee import db
|
||||
from sqlalchemy.dialects import postgresql
|
||||
@ -37,6 +38,7 @@ def update_records(user_id, sport_id, connection, session):
|
||||
.values(
|
||||
value=value,
|
||||
activity_id=record_data['activity'].id,
|
||||
activity_uuid=record_data['activity'].uuid,
|
||||
activity_date=record_data['activity'].activity_date,
|
||||
)
|
||||
)
|
||||
@ -89,6 +91,12 @@ class Sport(db.Model):
|
||||
class Activity(db.Model):
|
||||
__tablename__ = "activities"
|
||||
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
|
||||
uuid = db.Column(
|
||||
postgresql.UUID(as_uuid=True),
|
||||
default=uuid4,
|
||||
unique=True,
|
||||
nullable=False,
|
||||
)
|
||||
user_id = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=False)
|
||||
sport_id = db.Column(
|
||||
db.Integer, db.ForeignKey('sports.id'), nullable=False
|
||||
@ -226,7 +234,7 @@ class Activity(db.Model):
|
||||
.first()
|
||||
)
|
||||
return {
|
||||
"id": self.id,
|
||||
"id": self.uuid.hex, # WARNING: client use uuid as id
|
||||
"user": self.user.username,
|
||||
"sport_id": self.sport_id,
|
||||
"title": self.title,
|
||||
@ -247,10 +255,10 @@ class Activity(db.Model):
|
||||
"bounds": [float(bound) for bound in self.bounds]
|
||||
if self.bounds
|
||||
else [], # noqa
|
||||
"previous_activity": previous_activity.id
|
||||
"previous_activity": previous_activity.uuid.hex
|
||||
if previous_activity
|
||||
else None, # noqa
|
||||
"next_activity": next_activity.id if next_activity else None,
|
||||
"next_activity": next_activity.uuid.hex if next_activity else None,
|
||||
"segments": [segment.serialize() for segment in self.segments],
|
||||
"records": [record.serialize() for record in self.records],
|
||||
"map": self.map_id if self.map else None,
|
||||
@ -327,6 +335,7 @@ class ActivitySegment(db.Model):
|
||||
activity_id = db.Column(
|
||||
db.Integer, db.ForeignKey('activities.id'), primary_key=True
|
||||
)
|
||||
activity_uuid = db.Column(postgresql.UUID(as_uuid=True), nullable=False)
|
||||
segment_id = db.Column(db.Integer, primary_key=True)
|
||||
duration = db.Column(db.Interval, nullable=False)
|
||||
pauses = db.Column(db.Interval, nullable=True)
|
||||
@ -342,16 +351,17 @@ class ActivitySegment(db.Model):
|
||||
def __str__(self):
|
||||
return (
|
||||
f'<Segment \'{self.segment_id}\' '
|
||||
f'for activity \'{self.activity_id}\'>'
|
||||
f'for activity \'{self.activity_uuid.hex}\'>'
|
||||
)
|
||||
|
||||
def __init__(self, segment_id, activity_id):
|
||||
def __init__(self, segment_id, activity_id, activity_uuid):
|
||||
self.segment_id = segment_id
|
||||
self.activity_id = activity_id
|
||||
self.activity_uuid = activity_uuid
|
||||
|
||||
def serialize(self):
|
||||
return {
|
||||
"activity_id": self.activity_id,
|
||||
"activity_id": self.activity_uuid.hex,
|
||||
"segment_id": self.segment_id,
|
||||
"duration": str(self.duration) if self.duration else None,
|
||||
"pauses": str(self.pauses) if self.pauses else None,
|
||||
@ -381,6 +391,7 @@ class Record(db.Model):
|
||||
activity_id = db.Column(
|
||||
db.Integer, db.ForeignKey('activities.id'), nullable=False
|
||||
)
|
||||
activity_uuid = db.Column(postgresql.UUID(as_uuid=True), nullable=False)
|
||||
record_type = db.Column(Enum(*record_types, name="record_types"))
|
||||
activity_date = db.Column(db.DateTime, nullable=False)
|
||||
_value = db.Column("value", db.Integer, nullable=True)
|
||||
@ -396,6 +407,7 @@ class Record(db.Model):
|
||||
self.user_id = activity.user_id
|
||||
self.sport_id = activity.sport_id
|
||||
self.activity_id = activity.id
|
||||
self.activity_uuid = activity.uuid
|
||||
self.record_type = record_type
|
||||
self.activity_date = activity.activity_date
|
||||
|
||||
@ -426,7 +438,7 @@ class Record(db.Model):
|
||||
"id": self.id,
|
||||
"user": self.user.username,
|
||||
"sport_id": self.sport_id,
|
||||
"activity_id": self.activity_id,
|
||||
"activity_id": self.activity_uuid.hex,
|
||||
"record_type": self.record_type,
|
||||
"activity_date": self.activity_date,
|
||||
"value": value,
|
||||
|
@ -39,7 +39,7 @@ def get_records(auth_user_id):
|
||||
"records": [
|
||||
{
|
||||
"activity_date": "Sun, 07 Jul 2019 08:00:00 GMT",
|
||||
"activity_id": 4,
|
||||
"activity_id": "e060bde05e3f4906a32913b102c814cb",
|
||||
"id": 9,
|
||||
"record_type": "AS",
|
||||
"sport_id": 1,
|
||||
@ -48,7 +48,7 @@ def get_records(auth_user_id):
|
||||
},
|
||||
{
|
||||
"activity_date": "Sun, 07 Jul 2019 08:00:00 GMT",
|
||||
"activity_id": 4,
|
||||
"activity_id": "e060bde05e3f4906a32913b102c814cb",
|
||||
"id": 10,
|
||||
"record_type": "FD",
|
||||
"sport_id": 1,
|
||||
@ -57,7 +57,7 @@ def get_records(auth_user_id):
|
||||
},
|
||||
{
|
||||
"activity_date": "Sun, 07 Jul 2019 08:00:00 GMT",
|
||||
"activity_id": 7,
|
||||
"activity_id": "e060bde05e3f4906a32913b102c814cb",
|
||||
"id": 11,
|
||||
"record_type": "LD",
|
||||
"sport_id": 1,
|
||||
@ -66,7 +66,7 @@ def get_records(auth_user_id):
|
||||
},
|
||||
{
|
||||
"activity_date": "Sun, 07 Jul 2019 08:00:00 GMT",
|
||||
"activity_id": 4,
|
||||
"activity_id": "e060bde05e3f4906a32913b102c814cb",
|
||||
"id": 12,
|
||||
"record_type": "MS",
|
||||
"sport_id": 1,
|
||||
|
@ -118,9 +118,11 @@ def create_activity(user, activity_data, gpx_data=None):
|
||||
return new_activity
|
||||
|
||||
|
||||
def create_segment(activity_id, segment_data):
|
||||
def create_segment(activity_id, activity_uuid, segment_data):
|
||||
new_segment = ActivitySegment(
|
||||
activity_id=activity_id, segment_id=segment_data['idx']
|
||||
activity_id=activity_id,
|
||||
activity_uuid=activity_uuid,
|
||||
segment_id=segment_data['idx'],
|
||||
)
|
||||
new_segment.duration = segment_data['duration']
|
||||
new_segment.distance = segment_data['distance']
|
||||
@ -272,7 +274,9 @@ def process_one_gpx_file(params, filename):
|
||||
db.session.flush()
|
||||
|
||||
for segment_data in gpx_data['segments']:
|
||||
new_segment = create_segment(new_activity.id, segment_data)
|
||||
new_segment = create_segment(
|
||||
new_activity.id, new_activity.uuid, segment_data
|
||||
)
|
||||
db.session.add(new_segment)
|
||||
db.session.commit()
|
||||
return new_activity
|
||||
|
@ -0,0 +1,73 @@
|
||||
"""add uuid to activities
|
||||
|
||||
Revision ID: 3243cd25eca7
|
||||
Revises: 8a0aad4c838c
|
||||
Create Date: 2020-12-30 14:54:45.568864
|
||||
|
||||
"""
|
||||
from uuid import uuid4
|
||||
|
||||
import sqlalchemy as sa
|
||||
from alembic import op
|
||||
from sqlalchemy.dialects import postgresql
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision = '3243cd25eca7'
|
||||
down_revision = '8a0aad4c838c'
|
||||
branch_labels = None
|
||||
depends_on = None
|
||||
|
||||
|
||||
def upgrade():
|
||||
connection = op.get_bind()
|
||||
activities_helper = sa.Table(
|
||||
'activities',
|
||||
sa.MetaData(),
|
||||
sa.Column('id', sa.Integer(), nullable=False),
|
||||
sa.Column('uuid', postgresql.UUID(as_uuid=True), nullable=False),
|
||||
)
|
||||
|
||||
op.add_column(
|
||||
'activities',
|
||||
sa.Column('uuid', postgresql.UUID(as_uuid=True), nullable=True),
|
||||
)
|
||||
op.create_unique_constraint('activities_uuid_key', 'activities', ['uuid'])
|
||||
op.add_column(
|
||||
'activity_segments',
|
||||
sa.Column(
|
||||
'activity_uuid', postgresql.UUID(as_uuid=True), nullable=True
|
||||
),
|
||||
)
|
||||
op.add_column(
|
||||
'records',
|
||||
sa.Column(
|
||||
'activity_uuid', postgresql.UUID(as_uuid=True), nullable=True
|
||||
),
|
||||
)
|
||||
for activity in connection.execute(activities_helper.select()):
|
||||
activity_uuid = uuid4()
|
||||
op.execute(
|
||||
f"UPDATE activities SET uuid = '{activity_uuid}' "
|
||||
f"WHERE activities.id = {activity.id}"
|
||||
)
|
||||
op.execute(
|
||||
f"UPDATE records SET activity_uuid = '{activity_uuid}' "
|
||||
f"WHERE records.activity_id = {activity.id}"
|
||||
)
|
||||
op.execute(
|
||||
f"UPDATE activity_segments SET activity_uuid = '{activity_uuid}' "
|
||||
f"WHERE activity_segments.activity_id = {activity.id}"
|
||||
)
|
||||
|
||||
op.alter_column('activities', 'uuid', nullable=False)
|
||||
op.alter_column('activity_segments', 'activity_uuid', nullable=False)
|
||||
op.alter_column('records', 'activity_uuid', nullable=False)
|
||||
|
||||
|
||||
def downgrade():
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
op.drop_column('records', 'activity_uuid')
|
||||
op.drop_column('activity_segments', 'activity_uuid')
|
||||
op.drop_constraint('activities_uuid_key', 'activities', type_='unique')
|
||||
op.drop_column('activities', 'uuid')
|
||||
# ### end Alembic commands ###
|
@ -1,4 +1,5 @@
|
||||
import json
|
||||
from uuid import uuid4
|
||||
|
||||
|
||||
class TestGetActivities:
|
||||
@ -694,7 +695,7 @@ class TestGetActivity:
|
||||
)
|
||||
|
||||
response = client.get(
|
||||
'/api/activities/1',
|
||||
f'/api/activities/{activity_cycling_user_1.uuid.hex}',
|
||||
headers=dict(
|
||||
Authorization='Bearer '
|
||||
+ json.loads(resp_login.data.decode())['auth_token']
|
||||
@ -726,7 +727,7 @@ class TestGetActivity:
|
||||
)
|
||||
|
||||
response = client.get(
|
||||
'/api/activities/1',
|
||||
f'/api/activities/{activity_cycling_user_2.uuid.hex}',
|
||||
headers=dict(
|
||||
Authorization='Bearer '
|
||||
+ json.loads(resp_login.data.decode())['auth_token']
|
||||
@ -747,7 +748,7 @@ class TestGetActivity:
|
||||
)
|
||||
|
||||
response = client.get(
|
||||
'/api/activities/11',
|
||||
f'/api/activities/{uuid4().hex}',
|
||||
headers=dict(
|
||||
Authorization='Bearer '
|
||||
+ json.loads(resp_login.data.decode())['auth_token']
|
||||
@ -762,6 +763,7 @@ class TestGetActivity:
|
||||
def test_it_returns_404_on_getting_gpx_if_activity_does_not_exist(
|
||||
self, app, user_1
|
||||
):
|
||||
random_uuid = uuid4().hex
|
||||
client = app.test_client()
|
||||
resp_login = client.post(
|
||||
'/api/auth/login',
|
||||
@ -770,7 +772,7 @@ class TestGetActivity:
|
||||
)
|
||||
|
||||
response = client.get(
|
||||
'/api/activities/11/gpx',
|
||||
f'/api/activities/{random_uuid}/gpx',
|
||||
headers=dict(
|
||||
Authorization='Bearer '
|
||||
+ json.loads(resp_login.data.decode())['auth_token']
|
||||
@ -780,12 +782,13 @@ class TestGetActivity:
|
||||
data = json.loads(response.data.decode())
|
||||
assert response.status_code == 404
|
||||
assert 'not found' in data['status']
|
||||
assert 'Activity not found (id: 11)' in data['message']
|
||||
assert f'Activity not found (id: {random_uuid})' in data['message']
|
||||
assert data['data']['gpx'] == ''
|
||||
|
||||
def test_it_returns_404_on_getting_chart_data_if_activity_does_not_exist(
|
||||
self, app, user_1
|
||||
):
|
||||
random_uuid = uuid4().hex
|
||||
client = app.test_client()
|
||||
resp_login = client.post(
|
||||
'/api/auth/login',
|
||||
@ -794,7 +797,7 @@ class TestGetActivity:
|
||||
)
|
||||
|
||||
response = client.get(
|
||||
'/api/activities/11/chart_data',
|
||||
f'/api/activities/{random_uuid}/chart_data',
|
||||
headers=dict(
|
||||
Authorization='Bearer '
|
||||
+ json.loads(resp_login.data.decode())['auth_token']
|
||||
@ -804,12 +807,13 @@ class TestGetActivity:
|
||||
data = json.loads(response.data.decode())
|
||||
assert response.status_code == 404
|
||||
assert 'not found' in data['status']
|
||||
assert 'Activity not found (id: 11)' in data['message']
|
||||
assert f'Activity not found (id: {random_uuid})' in data['message']
|
||||
assert data['data']['chart_data'] == ''
|
||||
|
||||
def test_it_returns_404_on_getting_gpx_if_activity_have_no_gpx(
|
||||
self, app, user_1, sport_1_cycling, activity_cycling_user_1
|
||||
):
|
||||
activity_uuid = activity_cycling_user_1.uuid.hex
|
||||
client = app.test_client()
|
||||
resp_login = client.post(
|
||||
'/api/auth/login',
|
||||
@ -818,7 +822,7 @@ class TestGetActivity:
|
||||
)
|
||||
|
||||
response = client.get(
|
||||
'/api/activities/1/gpx',
|
||||
f'/api/activities/{activity_uuid}/gpx',
|
||||
headers=dict(
|
||||
Authorization='Bearer '
|
||||
+ json.loads(resp_login.data.decode())['auth_token']
|
||||
@ -828,11 +832,15 @@ class TestGetActivity:
|
||||
data = json.loads(response.data.decode())
|
||||
assert response.status_code == 404
|
||||
assert 'error' in data['status']
|
||||
assert 'No gpx file for this activity (id: 1)' in data['message']
|
||||
assert (
|
||||
f'No gpx file for this activity (id: {activity_uuid})'
|
||||
in data['message']
|
||||
)
|
||||
|
||||
def test_it_returns_404_if_activity_have_no_chart_data(
|
||||
self, app, user_1, sport_1_cycling, activity_cycling_user_1
|
||||
):
|
||||
activity_uuid = activity_cycling_user_1.uuid.hex
|
||||
client = app.test_client()
|
||||
resp_login = client.post(
|
||||
'/api/auth/login',
|
||||
@ -841,7 +849,7 @@ class TestGetActivity:
|
||||
)
|
||||
|
||||
response = client.get(
|
||||
'/api/activities/1/chart_data',
|
||||
f'/api/activities/{activity_uuid}/chart_data',
|
||||
headers=dict(
|
||||
Authorization='Bearer '
|
||||
+ json.loads(resp_login.data.decode())['auth_token']
|
||||
@ -851,7 +859,10 @@ class TestGetActivity:
|
||||
data = json.loads(response.data.decode())
|
||||
assert response.status_code == 404
|
||||
assert 'error' in data['status']
|
||||
assert 'No gpx file for this activity (id: 1)' in data['message']
|
||||
assert (
|
||||
f'No gpx file for this activity (id: {activity_uuid})'
|
||||
in data['message']
|
||||
)
|
||||
|
||||
def test_it_returns_500_on_getting_gpx_if_an_activity_has_invalid_gpx_pathname( # noqa
|
||||
self, app, user_1, sport_1_cycling, activity_cycling_user_1
|
||||
@ -865,7 +876,7 @@ class TestGetActivity:
|
||||
)
|
||||
|
||||
response = client.get(
|
||||
'/api/activities/1/gpx',
|
||||
f'/api/activities/{activity_cycling_user_1.uuid.hex}/gpx',
|
||||
headers=dict(
|
||||
Authorization='Bearer '
|
||||
+ json.loads(resp_login.data.decode())['auth_token']
|
||||
@ -881,7 +892,7 @@ class TestGetActivity:
|
||||
def test_it_returns_500_on_getting_chart_data_if_an_activity_has_invalid_gpx_pathname( # noqa
|
||||
self, app, user_1, sport_1_cycling, activity_cycling_user_1
|
||||
):
|
||||
activity_cycling_user_1.gpx = "some path"
|
||||
activity_cycling_user_1.gpx = 'some path'
|
||||
client = app.test_client()
|
||||
resp_login = client.post(
|
||||
'/api/auth/login',
|
||||
@ -890,7 +901,7 @@ class TestGetActivity:
|
||||
)
|
||||
|
||||
response = client.get(
|
||||
'/api/activities/1/chart_data',
|
||||
f'/api/activities/{activity_cycling_user_1.uuid.hex}/chart_data',
|
||||
headers=dict(
|
||||
Authorization='Bearer '
|
||||
+ json.loads(resp_login.data.decode())['auth_token']
|
||||
@ -911,7 +922,7 @@ class TestGetActivity:
|
||||
content_type='application/json',
|
||||
)
|
||||
response = client.get(
|
||||
'/api/activities/map/123',
|
||||
f'/api/activities/map/{uuid4().hex}',
|
||||
headers=dict(
|
||||
Authorization='Bearer '
|
||||
+ json.loads(resp_login.data.decode())['auth_token']
|
||||
|
@ -32,7 +32,7 @@ def assert_activity_data_with_gpx(data):
|
||||
assert len(data['data']['activities'][0]['segments']) == 1
|
||||
|
||||
segment = data['data']['activities'][0]['segments'][0]
|
||||
assert segment['activity_id'] == 1
|
||||
assert segment['activity_id'] == data['data']['activities'][0]['id']
|
||||
assert segment['segment_id'] == 0
|
||||
assert segment['duration'] == '0:04:10'
|
||||
assert segment['ascent'] == 0.4
|
||||
@ -48,22 +48,22 @@ def assert_activity_data_with_gpx(data):
|
||||
records = data['data']['activities'][0]['records']
|
||||
assert len(records) == 4
|
||||
assert records[0]['sport_id'] == 1
|
||||
assert records[0]['activity_id'] == 1
|
||||
assert records[0]['activity_id'] == data['data']['activities'][0]['id']
|
||||
assert records[0]['record_type'] == 'MS'
|
||||
assert records[0]['activity_date'] == 'Tue, 13 Mar 2018 12:44:45 GMT'
|
||||
assert records[0]['value'] == 5.12
|
||||
assert records[1]['sport_id'] == 1
|
||||
assert records[1]['activity_id'] == 1
|
||||
assert records[1]['activity_id'] == data['data']['activities'][0]['id']
|
||||
assert records[1]['record_type'] == 'LD'
|
||||
assert records[1]['activity_date'] == 'Tue, 13 Mar 2018 12:44:45 GMT'
|
||||
assert records[1]['value'] == '0:04:10'
|
||||
assert records[2]['sport_id'] == 1
|
||||
assert records[2]['activity_id'] == 1
|
||||
assert records[2]['activity_id'] == data['data']['activities'][0]['id']
|
||||
assert records[2]['record_type'] == 'FD'
|
||||
assert records[2]['activity_date'] == 'Tue, 13 Mar 2018 12:44:45 GMT'
|
||||
assert records[2]['value'] == 0.32
|
||||
assert records[3]['sport_id'] == 1
|
||||
assert records[3]['activity_id'] == 1
|
||||
assert records[3]['activity_id'] == data['data']['activities'][0]['id']
|
||||
assert records[3]['record_type'] == 'AS'
|
||||
assert records[3]['activity_date'] == 'Tue, 13 Mar 2018 12:44:45 GMT'
|
||||
assert records[3]['value'] == 4.61
|
||||
@ -97,7 +97,7 @@ def assert_activity_data_with_gpx_segments(data):
|
||||
assert len(data['data']['activities'][0]['segments']) == 2
|
||||
|
||||
segment = data['data']['activities'][0]['segments'][0]
|
||||
assert segment['activity_id'] == 1
|
||||
assert segment['activity_id'] == data['data']['activities'][0]['id']
|
||||
assert segment['segment_id'] == 0
|
||||
assert segment['duration'] == '0:01:30'
|
||||
assert segment['ascent'] is None
|
||||
@ -111,7 +111,7 @@ def assert_activity_data_with_gpx_segments(data):
|
||||
assert segment['pauses'] is None
|
||||
|
||||
segment = data['data']['activities'][0]['segments'][1]
|
||||
assert segment['activity_id'] == 1
|
||||
assert segment['activity_id'] == data['data']['activities'][0]['id']
|
||||
assert segment['segment_id'] == 1
|
||||
assert segment['duration'] == '0:02:25'
|
||||
assert segment['ascent'] == 0.4
|
||||
@ -127,17 +127,17 @@ def assert_activity_data_with_gpx_segments(data):
|
||||
records = data['data']['activities'][0]['records']
|
||||
assert len(records) == 3
|
||||
assert records[0]['sport_id'] == 1
|
||||
assert records[0]['activity_id'] == 1
|
||||
assert records[0]['activity_id'] == data['data']['activities'][0]['id']
|
||||
assert records[0]['record_type'] == 'LD'
|
||||
assert records[0]['activity_date'] == 'Tue, 13 Mar 2018 12:44:45 GMT'
|
||||
assert records[0]['value'] == '0:03:55'
|
||||
assert records[1]['sport_id'] == 1
|
||||
assert records[1]['activity_id'] == 1
|
||||
assert records[1]['activity_id'] == data['data']['activities'][0]['id']
|
||||
assert records[1]['record_type'] == 'FD'
|
||||
assert records[1]['activity_date'] == 'Tue, 13 Mar 2018 12:44:45 GMT'
|
||||
assert records[1]['value'] == 0.3
|
||||
assert records[2]['sport_id'] == 1
|
||||
assert records[2]['activity_id'] == 1
|
||||
assert records[2]['activity_id'] == data['data']['activities'][0]['id']
|
||||
assert records[2]['record_type'] == 'AS'
|
||||
assert records[2]['activity_date'] == 'Tue, 13 Mar 2018 12:44:45 GMT'
|
||||
assert records[2]['value'] == 4.59
|
||||
@ -176,22 +176,22 @@ def assert_activity_data_wo_gpx(data):
|
||||
records = data['data']['activities'][0]['records']
|
||||
assert len(records) == 4
|
||||
assert records[0]['sport_id'] == 1
|
||||
assert records[0]['activity_id'] == 1
|
||||
assert records[0]['activity_id'] == data['data']['activities'][0]['id']
|
||||
assert records[0]['record_type'] == 'MS'
|
||||
assert records[0]['activity_date'] == 'Tue, 15 May 2018 14:05:00 GMT'
|
||||
assert records[0]['value'] == 10.0
|
||||
assert records[1]['sport_id'] == 1
|
||||
assert records[1]['activity_id'] == 1
|
||||
assert records[1]['activity_id'] == data['data']['activities'][0]['id']
|
||||
assert records[1]['record_type'] == 'LD'
|
||||
assert records[1]['activity_date'] == 'Tue, 15 May 2018 14:05:00 GMT'
|
||||
assert records[1]['value'] == '1:00:00'
|
||||
assert records[2]['sport_id'] == 1
|
||||
assert records[2]['activity_id'] == 1
|
||||
assert records[2]['activity_id'] == data['data']['activities'][0]['id']
|
||||
assert records[2]['record_type'] == 'FD'
|
||||
assert records[2]['activity_date'] == 'Tue, 15 May 2018 14:05:00 GMT'
|
||||
assert records[2]['value'] == 10.0
|
||||
assert records[3]['sport_id'] == 1
|
||||
assert records[3]['activity_id'] == 1
|
||||
assert records[3]['activity_id'] == data['data']['activities'][0]['id']
|
||||
assert records[3]['record_type'] == 'AS'
|
||||
assert records[3]['activity_date'] == 'Tue, 15 May 2018 14:05:00 GMT'
|
||||
assert records[3]['value'] == 10.0
|
||||
@ -305,7 +305,7 @@ class TestPostActivityWithGpx:
|
||||
content_type='application/json',
|
||||
)
|
||||
|
||||
client.post(
|
||||
response = client.post(
|
||||
'/api/activities',
|
||||
data=dict(
|
||||
file=(BytesIO(str.encode(gpx_file)), 'example.gpx'),
|
||||
@ -317,17 +317,10 @@ class TestPostActivityWithGpx:
|
||||
+ json.loads(resp_login.data.decode())['auth_token'],
|
||||
),
|
||||
)
|
||||
response = client.get(
|
||||
'/api/activities/1',
|
||||
headers=dict(
|
||||
Authorization='Bearer '
|
||||
+ json.loads(resp_login.data.decode())['auth_token']
|
||||
),
|
||||
)
|
||||
data = json.loads(response.data.decode())
|
||||
|
||||
assert response.status_code == 200
|
||||
assert 'success' in data['status']
|
||||
assert response.status_code == 201
|
||||
assert 'created' in data['status']
|
||||
assert len(data['data']['activities']) == 1
|
||||
assert 'just an activity' == data['data']['activities'][0]['title']
|
||||
assert 'test activity' == data['data']['activities'][0]['notes']
|
||||
@ -766,7 +759,7 @@ class TestPostAndGetActivityWithGpx:
|
||||
data=json.dumps(dict(email='test@test.com', password='12345678')),
|
||||
content_type='application/json',
|
||||
)
|
||||
client.post(
|
||||
response = client.post(
|
||||
'/api/activities',
|
||||
data=dict(
|
||||
file=(BytesIO(str.encode(gpx_file)), 'example.gpx'),
|
||||
@ -779,17 +772,9 @@ class TestPostAndGetActivityWithGpx:
|
||||
),
|
||||
)
|
||||
|
||||
response = client.get(
|
||||
'/api/activities/1',
|
||||
headers=dict(
|
||||
Authorization='Bearer '
|
||||
+ json.loads(resp_login.data.decode())['auth_token']
|
||||
),
|
||||
)
|
||||
|
||||
data = json.loads(response.data.decode())
|
||||
assert response.status_code == 200
|
||||
assert 'success' in data['status']
|
||||
assert response.status_code == 201
|
||||
assert 'created' in data['status']
|
||||
assert len(data['data']['activities']) == 1
|
||||
assert 'just an activity' == data['data']['activities'][0]['title']
|
||||
if with_segments:
|
||||
@ -797,9 +782,10 @@ class TestPostAndGetActivityWithGpx:
|
||||
else:
|
||||
assert_activity_data_with_gpx(data)
|
||||
map_id = data['data']['activities'][0]['map']
|
||||
activity_uuid = data['data']['activities'][0]['id']
|
||||
|
||||
response = client.get(
|
||||
'/api/activities/1/gpx',
|
||||
f'/api/activities/{activity_uuid}/gpx',
|
||||
headers=dict(
|
||||
Authorization='Bearer '
|
||||
+ json.loads(resp_login.data.decode())['auth_token']
|
||||
@ -813,7 +799,7 @@ class TestPostAndGetActivityWithGpx:
|
||||
assert len(data['data']['gpx']) != ''
|
||||
|
||||
response = client.get(
|
||||
'/api/activities/1/gpx/segment/1',
|
||||
f'/api/activities/{activity_uuid}/gpx/segment/1',
|
||||
headers=dict(
|
||||
Authorization='Bearer '
|
||||
+ json.loads(resp_login.data.decode())['auth_token']
|
||||
@ -836,7 +822,7 @@ class TestPostAndGetActivityWithGpx:
|
||||
assert response.status_code == 200
|
||||
|
||||
# error case in the same test to avoid generate a new map file
|
||||
activity = Activity.query.filter_by(id=1).first()
|
||||
activity = Activity.query.filter_by(uuid=activity_uuid).first()
|
||||
activity.map = 'incorrect path'
|
||||
|
||||
assert response.status_code == 200
|
||||
@ -877,7 +863,7 @@ class TestPostAndGetActivityWithGpx:
|
||||
content_type='application/json',
|
||||
)
|
||||
|
||||
client.post(
|
||||
response = client.post(
|
||||
'/api/activities',
|
||||
data=dict(
|
||||
file=(BytesIO(str.encode(gpx_file)), 'example.gpx'),
|
||||
@ -889,8 +875,10 @@ class TestPostAndGetActivityWithGpx:
|
||||
+ json.loads(resp_login.data.decode())['auth_token'],
|
||||
),
|
||||
)
|
||||
data = json.loads(response.data.decode())
|
||||
activity_uuid = data['data']['activities'][0]['id']
|
||||
response = client.get(
|
||||
'/api/activities/1/chart_data',
|
||||
f'/api/activities/{activity_uuid}/chart_data',
|
||||
headers=dict(
|
||||
Authorization='Bearer '
|
||||
+ json.loads(resp_login.data.decode())['auth_token']
|
||||
@ -913,7 +901,7 @@ class TestPostAndGetActivityWithGpx:
|
||||
content_type='application/json',
|
||||
)
|
||||
|
||||
client.post(
|
||||
response = client.post(
|
||||
'/api/activities',
|
||||
data=dict(
|
||||
file=(BytesIO(str.encode(gpx_file)), 'example.gpx'),
|
||||
@ -925,8 +913,10 @@ class TestPostAndGetActivityWithGpx:
|
||||
+ json.loads(resp_login.data.decode())['auth_token'],
|
||||
),
|
||||
)
|
||||
data = json.loads(response.data.decode())
|
||||
activity_uuid = data['data']['activities'][0]['id']
|
||||
response = client.get(
|
||||
'/api/activities/1/chart_data/segment/1',
|
||||
f'/api/activities/{activity_uuid}/chart_data/segment/1',
|
||||
headers=dict(
|
||||
Authorization='Bearer '
|
||||
+ json.loads(resp_login.data.decode())['auth_token']
|
||||
@ -948,7 +938,7 @@ class TestPostAndGetActivityWithGpx:
|
||||
data=json.dumps(dict(email='test@test.com', password='12345678')),
|
||||
content_type='application/json',
|
||||
)
|
||||
client.post(
|
||||
response = client.post(
|
||||
'/api/activities',
|
||||
data=dict(
|
||||
file=(BytesIO(str.encode(gpx_file)), 'example.gpx'),
|
||||
@ -960,6 +950,8 @@ class TestPostAndGetActivityWithGpx:
|
||||
+ json.loads(resp_login.data.decode())['auth_token'],
|
||||
),
|
||||
)
|
||||
data = json.loads(response.data.decode())
|
||||
activity_uuid = data['data']['activities'][0]['id']
|
||||
|
||||
resp_login = client.post(
|
||||
'/api/auth/login',
|
||||
@ -967,7 +959,7 @@ class TestPostAndGetActivityWithGpx:
|
||||
content_type='application/json',
|
||||
)
|
||||
response = client.get(
|
||||
'/api/activities/1/chart_data',
|
||||
f'/api/activities/{activity_uuid}/chart_data',
|
||||
headers=dict(
|
||||
Authorization='Bearer '
|
||||
+ json.loads(resp_login.data.decode())['auth_token']
|
||||
@ -989,7 +981,7 @@ class TestPostAndGetActivityWithGpx:
|
||||
content_type='application/json',
|
||||
)
|
||||
|
||||
client.post(
|
||||
response = client.post(
|
||||
'/api/activities',
|
||||
data=dict(
|
||||
file=(BytesIO(str.encode(gpx_file)), 'example.gpx'),
|
||||
@ -1001,8 +993,10 @@ class TestPostAndGetActivityWithGpx:
|
||||
+ json.loads(resp_login.data.decode())['auth_token'],
|
||||
),
|
||||
)
|
||||
data = json.loads(response.data.decode())
|
||||
activity_uuid = data['data']['activities'][0]['id']
|
||||
response = client.get(
|
||||
'/api/activities/1/chart_data/segment/0',
|
||||
f'/api/activities/{activity_uuid}/chart_data/segment/0',
|
||||
headers=dict(
|
||||
Authorization='Bearer '
|
||||
+ json.loads(resp_login.data.decode())['auth_token']
|
||||
@ -1025,7 +1019,7 @@ class TestPostAndGetActivityWithGpx:
|
||||
content_type='application/json',
|
||||
)
|
||||
|
||||
client.post(
|
||||
response = client.post(
|
||||
'/api/activities',
|
||||
data=dict(
|
||||
file=(BytesIO(str.encode(gpx_file)), 'example.gpx'),
|
||||
@ -1037,8 +1031,10 @@ class TestPostAndGetActivityWithGpx:
|
||||
+ json.loads(resp_login.data.decode())['auth_token'],
|
||||
),
|
||||
)
|
||||
data = json.loads(response.data.decode())
|
||||
activity_uuid = data['data']['activities'][0]['id']
|
||||
response = client.get(
|
||||
'/api/activities/1/chart_data/segment/999999',
|
||||
f'/api/activities/{activity_uuid}/chart_data/segment/999999',
|
||||
headers=dict(
|
||||
Authorization='Bearer '
|
||||
+ json.loads(resp_login.data.decode())['auth_token']
|
||||
@ -1063,7 +1059,7 @@ class TestPostAndGetActivityWithoutGpx:
|
||||
content_type='application/json',
|
||||
)
|
||||
|
||||
client.post(
|
||||
response = client.post(
|
||||
'/api/activities/no_gpx',
|
||||
content_type='application/json',
|
||||
data=json.dumps(
|
||||
@ -1079,8 +1075,10 @@ class TestPostAndGetActivityWithoutGpx:
|
||||
+ json.loads(resp_login.data.decode())['auth_token']
|
||||
),
|
||||
)
|
||||
data = json.loads(response.data.decode())
|
||||
activity_uuid = data['data']['activities'][0]['id']
|
||||
response = client.get(
|
||||
'/api/activities/1',
|
||||
f'/api/activities/{activity_uuid}',
|
||||
headers=dict(
|
||||
Authorization='Bearer '
|
||||
+ json.loads(resp_login.data.decode())['auth_token']
|
||||
@ -1103,7 +1101,7 @@ class TestPostAndGetActivityWithoutGpx:
|
||||
content_type='application/json',
|
||||
)
|
||||
|
||||
client.post(
|
||||
response = client.post(
|
||||
'/api/activities/no_gpx',
|
||||
content_type='application/json',
|
||||
data=json.dumps(
|
||||
@ -1120,8 +1118,10 @@ class TestPostAndGetActivityWithoutGpx:
|
||||
+ json.loads(resp_login.data.decode())['auth_token']
|
||||
),
|
||||
)
|
||||
data = json.loads(response.data.decode())
|
||||
activity_uuid = data['data']['activities'][0]['id']
|
||||
response = client.get(
|
||||
'/api/activities/1',
|
||||
f'/api/activities/{activity_uuid}',
|
||||
headers=dict(
|
||||
Authorization='Bearer '
|
||||
+ json.loads(resp_login.data.decode())['auth_token']
|
||||
@ -1147,7 +1147,7 @@ class TestPostAndGetActivityUsingTimezones:
|
||||
content_type='application/json',
|
||||
)
|
||||
|
||||
client.post(
|
||||
response = client.post(
|
||||
'/api/activities/no_gpx',
|
||||
content_type='application/json',
|
||||
data=json.dumps(
|
||||
@ -1163,8 +1163,10 @@ class TestPostAndGetActivityUsingTimezones:
|
||||
+ json.loads(resp_login.data.decode())['auth_token']
|
||||
),
|
||||
)
|
||||
data = json.loads(response.data.decode())
|
||||
activity_uuid = data['data']['activities'][0]['id']
|
||||
response = client.get(
|
||||
'/api/activities/1',
|
||||
f'/api/activities/{activity_uuid}',
|
||||
headers=dict(
|
||||
Authorization='Bearer '
|
||||
+ json.loads(resp_login.data.decode())['auth_token']
|
||||
|
@ -1,10 +1,12 @@
|
||||
import json
|
||||
from io import BytesIO
|
||||
from uuid import uuid4
|
||||
|
||||
from fittrackee.activities.models import Activity
|
||||
|
||||
from .utils import post_an_activity
|
||||
|
||||
def assert_activity_data_with_gpx(data):
|
||||
|
||||
def assert_activity_data_with_gpx(data, sport_id):
|
||||
assert 'creation_date' in data['data']['activities'][0]
|
||||
assert (
|
||||
'Tue, 13 Mar 2018 12:44:45 GMT'
|
||||
@ -25,23 +27,23 @@ def assert_activity_data_with_gpx(data):
|
||||
|
||||
records = data['data']['activities'][0]['records']
|
||||
assert len(records) == 4
|
||||
assert records[0]['sport_id'] == 2
|
||||
assert records[0]['activity_id'] == 1
|
||||
assert records[0]['sport_id'] == sport_id
|
||||
assert records[0]['activity_id'] == data['data']['activities'][0]['id']
|
||||
assert records[0]['record_type'] == 'MS'
|
||||
assert records[0]['activity_date'] == 'Tue, 13 Mar 2018 12:44:45 GMT'
|
||||
assert records[0]['value'] == 5.12
|
||||
assert records[1]['sport_id'] == 2
|
||||
assert records[1]['activity_id'] == 1
|
||||
assert records[1]['sport_id'] == sport_id
|
||||
assert records[1]['activity_id'] == data['data']['activities'][0]['id']
|
||||
assert records[1]['record_type'] == 'LD'
|
||||
assert records[1]['activity_date'] == 'Tue, 13 Mar 2018 12:44:45 GMT'
|
||||
assert records[1]['value'] == '0:04:10'
|
||||
assert records[2]['sport_id'] == 2
|
||||
assert records[2]['activity_id'] == 1
|
||||
assert records[2]['sport_id'] == sport_id
|
||||
assert records[2]['activity_id'] == data['data']['activities'][0]['id']
|
||||
assert records[2]['record_type'] == 'FD'
|
||||
assert records[2]['activity_date'] == 'Tue, 13 Mar 2018 12:44:45 GMT'
|
||||
assert records[2]['value'] == 0.32
|
||||
assert records[3]['sport_id'] == 2
|
||||
assert records[3]['activity_id'] == 1
|
||||
assert records[3]['sport_id'] == sport_id
|
||||
assert records[3]['activity_id'] == data['data']['activities'][0]['id']
|
||||
assert records[3]['record_type'] == 'AS'
|
||||
assert records[3]['activity_date'] == 'Tue, 13 Mar 2018 12:44:45 GMT'
|
||||
assert records[3]['value'] == 4.61
|
||||
@ -51,73 +53,35 @@ class TestEditActivityWithGpx:
|
||||
def test_it_updates_title_for_an_activity_with_gpx(
|
||||
self, app, user_1, sport_1_cycling, sport_2_running, gpx_file
|
||||
):
|
||||
token, activity_uuid = post_an_activity(app, gpx_file)
|
||||
client = app.test_client()
|
||||
resp_login = client.post(
|
||||
'/api/auth/login',
|
||||
data=json.dumps(dict(email='test@test.com', password='12345678')),
|
||||
content_type='application/json',
|
||||
)
|
||||
client.post(
|
||||
'/api/activities',
|
||||
data=dict(
|
||||
file=(BytesIO(str.encode(gpx_file)), 'example.gpx'),
|
||||
data='{"sport_id": 1}',
|
||||
),
|
||||
headers=dict(
|
||||
content_type='multipart/form-data',
|
||||
Authorization='Bearer '
|
||||
+ json.loads(resp_login.data.decode())['auth_token'],
|
||||
),
|
||||
)
|
||||
|
||||
response = client.patch(
|
||||
'/api/activities/1',
|
||||
f'/api/activities/{activity_uuid}',
|
||||
content_type='application/json',
|
||||
data=json.dumps(dict(sport_id=2, title="Activity test")),
|
||||
headers=dict(
|
||||
Authorization='Bearer '
|
||||
+ json.loads(resp_login.data.decode())['auth_token']
|
||||
),
|
||||
headers=dict(Authorization=f'Bearer {token}'),
|
||||
)
|
||||
|
||||
data = json.loads(response.data.decode())
|
||||
assert response.status_code == 200
|
||||
assert 'success' in data['status']
|
||||
assert len(data['data']['activities']) == 1
|
||||
assert 2 == data['data']['activities'][0]['sport_id']
|
||||
assert sport_2_running.id == data['data']['activities'][0]['sport_id']
|
||||
assert data['data']['activities'][0]['title'] == 'Activity test'
|
||||
assert_activity_data_with_gpx(data)
|
||||
assert_activity_data_with_gpx(data, sport_2_running.id)
|
||||
|
||||
def test_it_adds_notes_for_an_activity_with_gpx(
|
||||
self, app, user_1, sport_1_cycling, sport_2_running, gpx_file
|
||||
):
|
||||
token, activity_uuid = post_an_activity(app, gpx_file)
|
||||
client = app.test_client()
|
||||
resp_login = client.post(
|
||||
'/api/auth/login',
|
||||
data=json.dumps(dict(email='test@test.com', password='12345678')),
|
||||
content_type='application/json',
|
||||
)
|
||||
client.post(
|
||||
'/api/activities',
|
||||
data=dict(
|
||||
file=(BytesIO(str.encode(gpx_file)), 'example.gpx'),
|
||||
data='{"sport_id": 1}',
|
||||
),
|
||||
headers=dict(
|
||||
content_type='multipart/form-data',
|
||||
Authorization='Bearer '
|
||||
+ json.loads(resp_login.data.decode())['auth_token'],
|
||||
),
|
||||
)
|
||||
|
||||
response = client.patch(
|
||||
'/api/activities/1',
|
||||
f'/api/activities/{activity_uuid}',
|
||||
content_type='application/json',
|
||||
data=json.dumps(dict(notes="test notes")),
|
||||
headers=dict(
|
||||
Authorization='Bearer '
|
||||
+ json.loads(resp_login.data.decode())['auth_token']
|
||||
),
|
||||
headers=dict(Authorization=f'Bearer {token}'),
|
||||
)
|
||||
|
||||
data = json.loads(response.data.decode())
|
||||
@ -130,24 +94,8 @@ class TestEditActivityWithGpx:
|
||||
def test_it_raises_403_when_editing_an_activity_from_different_user(
|
||||
self, app, user_1, user_2, sport_1_cycling, sport_2_running, gpx_file
|
||||
):
|
||||
_, activity_uuid = post_an_activity(app, gpx_file)
|
||||
client = app.test_client()
|
||||
resp_login = client.post(
|
||||
'/api/auth/login',
|
||||
data=json.dumps(dict(email='test@test.com', password='12345678')),
|
||||
content_type='application/json',
|
||||
)
|
||||
client.post(
|
||||
'/api/activities',
|
||||
data=dict(
|
||||
file=(BytesIO(str.encode(gpx_file)), 'example.gpx'),
|
||||
data='{"sport_id": 1}',
|
||||
),
|
||||
headers=dict(
|
||||
content_type='multipart/form-data',
|
||||
Authorization='Bearer '
|
||||
+ json.loads(resp_login.data.decode())['auth_token'],
|
||||
),
|
||||
)
|
||||
resp_login = client.post(
|
||||
'/api/auth/login',
|
||||
data=json.dumps(dict(email='toto@toto.com', password='87654321')),
|
||||
@ -155,7 +103,7 @@ class TestEditActivityWithGpx:
|
||||
)
|
||||
|
||||
response = client.patch(
|
||||
'/api/activities/1',
|
||||
f'/api/activities/{activity_uuid}',
|
||||
content_type='application/json',
|
||||
data=json.dumps(dict(sport_id=2, title="Activity test")),
|
||||
headers=dict(
|
||||
@ -172,73 +120,35 @@ class TestEditActivityWithGpx:
|
||||
def test_it_updates_sport(
|
||||
self, app, user_1, sport_1_cycling, sport_2_running, gpx_file
|
||||
):
|
||||
token, activity_uuid = post_an_activity(app, gpx_file)
|
||||
client = app.test_client()
|
||||
resp_login = client.post(
|
||||
'/api/auth/login',
|
||||
data=json.dumps(dict(email='test@test.com', password='12345678')),
|
||||
content_type='application/json',
|
||||
)
|
||||
client.post(
|
||||
'/api/activities',
|
||||
data=dict(
|
||||
file=(BytesIO(str.encode(gpx_file)), 'example.gpx'),
|
||||
data='{"sport_id": 1}',
|
||||
),
|
||||
headers=dict(
|
||||
content_type='multipart/form-data',
|
||||
Authorization='Bearer '
|
||||
+ json.loads(resp_login.data.decode())['auth_token'],
|
||||
),
|
||||
)
|
||||
|
||||
response = client.patch(
|
||||
'/api/activities/1',
|
||||
f'/api/activities/{activity_uuid}',
|
||||
content_type='application/json',
|
||||
data=json.dumps(dict(sport_id=2)),
|
||||
headers=dict(
|
||||
Authorization='Bearer '
|
||||
+ json.loads(resp_login.data.decode())['auth_token']
|
||||
),
|
||||
headers=dict(Authorization=f'Bearer {token}'),
|
||||
)
|
||||
|
||||
data = json.loads(response.data.decode())
|
||||
assert response.status_code == 200
|
||||
assert 'success' in data['status']
|
||||
assert len(data['data']['activities']) == 1
|
||||
assert 2 == data['data']['activities'][0]['sport_id']
|
||||
assert sport_2_running.id == data['data']['activities'][0]['sport_id']
|
||||
assert data['data']['activities'][0]['title'] == 'just an activity'
|
||||
assert_activity_data_with_gpx(data)
|
||||
assert_activity_data_with_gpx(data, sport_2_running.id)
|
||||
|
||||
def test_it_returns_400_if_payload_is_empty(
|
||||
self, app, user_1, sport_1_cycling, gpx_file
|
||||
):
|
||||
token, activity_uuid = post_an_activity(app, gpx_file)
|
||||
client = app.test_client()
|
||||
resp_login = client.post(
|
||||
'/api/auth/login',
|
||||
data=json.dumps(dict(email='test@test.com', password='12345678')),
|
||||
content_type='application/json',
|
||||
)
|
||||
client.post(
|
||||
'/api/activities',
|
||||
data=dict(
|
||||
file=(BytesIO(str.encode(gpx_file)), 'example.gpx'),
|
||||
data='{"sport_id": 1}',
|
||||
),
|
||||
headers=dict(
|
||||
content_type='multipart/form-data',
|
||||
Authorization='Bearer '
|
||||
+ json.loads(resp_login.data.decode())['auth_token'],
|
||||
),
|
||||
)
|
||||
|
||||
response = client.patch(
|
||||
'/api/activities/1',
|
||||
f'/api/activities/{activity_uuid}',
|
||||
content_type='application/json',
|
||||
data=json.dumps(dict()),
|
||||
headers=dict(
|
||||
Authorization='Bearer '
|
||||
+ json.loads(resp_login.data.decode())['auth_token']
|
||||
),
|
||||
headers=dict(Authorization=f'Bearer {token}'),
|
||||
)
|
||||
|
||||
data = json.loads(response.data.decode())
|
||||
@ -249,33 +159,14 @@ class TestEditActivityWithGpx:
|
||||
def test_it_raises_500_if_sport_does_not_exists(
|
||||
self, app, user_1, sport_1_cycling, gpx_file
|
||||
):
|
||||
token, activity_uuid = post_an_activity(app, gpx_file)
|
||||
client = app.test_client()
|
||||
resp_login = client.post(
|
||||
'/api/auth/login',
|
||||
data=json.dumps(dict(email='test@test.com', password='12345678')),
|
||||
content_type='application/json',
|
||||
)
|
||||
client.post(
|
||||
'/api/activities',
|
||||
data=dict(
|
||||
file=(BytesIO(str.encode(gpx_file)), 'example.gpx'),
|
||||
data='{"sport_id": 1}',
|
||||
),
|
||||
headers=dict(
|
||||
content_type='multipart/form-data',
|
||||
Authorization='Bearer '
|
||||
+ json.loads(resp_login.data.decode())['auth_token'],
|
||||
),
|
||||
)
|
||||
|
||||
response = client.patch(
|
||||
'/api/activities/1',
|
||||
f'/api/activities/{activity_uuid}',
|
||||
content_type='application/json',
|
||||
data=json.dumps(dict(sport_id=2)),
|
||||
headers=dict(
|
||||
Authorization='Bearer '
|
||||
+ json.loads(resp_login.data.decode())['auth_token']
|
||||
),
|
||||
headers=dict(Authorization=f'Bearer {token}'),
|
||||
)
|
||||
|
||||
data = json.loads(response.data.decode())
|
||||
@ -296,6 +187,7 @@ class TestEditActivityWithoutGpx:
|
||||
sport_2_running,
|
||||
activity_cycling_user_1,
|
||||
):
|
||||
activity_uuid = activity_cycling_user_1.uuid.hex
|
||||
client = app.test_client()
|
||||
resp_login = client.post(
|
||||
'/api/auth/login',
|
||||
@ -304,7 +196,7 @@ class TestEditActivityWithoutGpx:
|
||||
)
|
||||
|
||||
response = client.patch(
|
||||
'/api/activities/1',
|
||||
f'/api/activities/{activity_uuid}',
|
||||
content_type='application/json',
|
||||
data=json.dumps(
|
||||
dict(
|
||||
@ -332,7 +224,7 @@ class TestEditActivityWithoutGpx:
|
||||
== 'Tue, 15 May 2018 15:05:00 GMT'
|
||||
)
|
||||
assert data['data']['activities'][0]['user'] == 'test'
|
||||
assert data['data']['activities'][0]['sport_id'] == 2
|
||||
assert data['data']['activities'][0]['sport_id'] == sport_2_running.id
|
||||
assert data['data']['activities'][0]['duration'] == '1:00:00'
|
||||
assert data['data']['activities'][0]['title'] == 'Activity test'
|
||||
assert data['data']['activities'][0]['ascent'] is None
|
||||
@ -352,23 +244,23 @@ class TestEditActivityWithoutGpx:
|
||||
|
||||
records = data['data']['activities'][0]['records']
|
||||
assert len(records) == 4
|
||||
assert records[0]['sport_id'] == 2
|
||||
assert records[0]['activity_id'] == 1
|
||||
assert records[0]['sport_id'] == sport_2_running.id
|
||||
assert records[0]['activity_id'] == activity_uuid
|
||||
assert records[0]['record_type'] == 'MS'
|
||||
assert records[0]['activity_date'] == 'Tue, 15 May 2018 15:05:00 GMT'
|
||||
assert records[0]['value'] == 8.0
|
||||
assert records[1]['sport_id'] == 2
|
||||
assert records[1]['activity_id'] == 1
|
||||
assert records[1]['sport_id'] == sport_2_running.id
|
||||
assert records[1]['activity_id'] == activity_uuid
|
||||
assert records[1]['record_type'] == 'LD'
|
||||
assert records[1]['activity_date'] == 'Tue, 15 May 2018 15:05:00 GMT'
|
||||
assert records[1]['value'] == '1:00:00'
|
||||
assert records[2]['sport_id'] == 2
|
||||
assert records[2]['activity_id'] == 1
|
||||
assert records[2]['sport_id'] == sport_2_running.id
|
||||
assert records[2]['activity_id'] == activity_uuid
|
||||
assert records[2]['record_type'] == 'FD'
|
||||
assert records[2]['activity_date'] == 'Tue, 15 May 2018 15:05:00 GMT'
|
||||
assert records[2]['value'] == 8.0
|
||||
assert records[3]['sport_id'] == 2
|
||||
assert records[3]['activity_id'] == 1
|
||||
assert records[3]['sport_id'] == sport_2_running.id
|
||||
assert records[3]['activity_id'] == activity_uuid
|
||||
assert records[3]['record_type'] == 'AS'
|
||||
assert records[3]['activity_date'] == 'Tue, 15 May 2018 15:05:00 GMT'
|
||||
assert records[3]['value'] == 8.0
|
||||
@ -376,6 +268,7 @@ class TestEditActivityWithoutGpx:
|
||||
def test_it_adds_notes_to_an_activity_wo_gpx(
|
||||
self, app, user_1, sport_1_cycling, activity_cycling_user_1
|
||||
):
|
||||
activity_uuid = activity_cycling_user_1.uuid.hex
|
||||
client = app.test_client()
|
||||
resp_login = client.post(
|
||||
'/api/auth/login',
|
||||
@ -384,7 +277,7 @@ class TestEditActivityWithoutGpx:
|
||||
)
|
||||
|
||||
response = client.patch(
|
||||
'/api/activities/1',
|
||||
f'/api/activities/{activity_uuid}',
|
||||
content_type='application/json',
|
||||
data=json.dumps(dict(notes='test notes')),
|
||||
headers=dict(
|
||||
@ -403,7 +296,7 @@ class TestEditActivityWithoutGpx:
|
||||
== 'Mon, 01 Jan 2018 00:00:00 GMT'
|
||||
)
|
||||
assert data['data']['activities'][0]['user'] == 'test'
|
||||
assert data['data']['activities'][0]['sport_id'] == 1
|
||||
assert data['data']['activities'][0]['sport_id'] == sport_1_cycling.id
|
||||
assert data['data']['activities'][0]['duration'] == '1:00:00'
|
||||
assert data['data']['activities'][0]['title'] is None
|
||||
assert data['data']['activities'][0]['ascent'] is None
|
||||
@ -423,23 +316,23 @@ class TestEditActivityWithoutGpx:
|
||||
|
||||
records = data['data']['activities'][0]['records']
|
||||
assert len(records) == 4
|
||||
assert records[0]['sport_id'] == 1
|
||||
assert records[0]['activity_id'] == 1
|
||||
assert records[0]['sport_id'] == sport_1_cycling.id
|
||||
assert records[0]['activity_id'] == activity_uuid
|
||||
assert records[0]['record_type'] == 'MS'
|
||||
assert records[0]['activity_date'] == 'Mon, 01 Jan 2018 00:00:00 GMT'
|
||||
assert records[0]['value'] == 10.0
|
||||
assert records[1]['sport_id'] == 1
|
||||
assert records[1]['activity_id'] == 1
|
||||
assert records[1]['sport_id'] == sport_1_cycling.id
|
||||
assert records[1]['activity_id'] == activity_uuid
|
||||
assert records[1]['record_type'] == 'LD'
|
||||
assert records[1]['activity_date'] == 'Mon, 01 Jan 2018 00:00:00 GMT'
|
||||
assert records[1]['value'] == '1:00:00'
|
||||
assert records[2]['sport_id'] == 1
|
||||
assert records[2]['activity_id'] == 1
|
||||
assert records[2]['sport_id'] == sport_1_cycling.id
|
||||
assert records[2]['activity_id'] == activity_uuid
|
||||
assert records[2]['record_type'] == 'FD'
|
||||
assert records[2]['activity_date'] == 'Mon, 01 Jan 2018 00:00:00 GMT'
|
||||
assert records[2]['value'] == 10.0
|
||||
assert records[3]['sport_id'] == 1
|
||||
assert records[3]['activity_id'] == 1
|
||||
assert records[3]['sport_id'] == sport_1_cycling.id
|
||||
assert records[3]['activity_id'] == activity_uuid
|
||||
assert records[3]['record_type'] == 'AS'
|
||||
assert records[3]['activity_date'] == 'Mon, 01 Jan 2018 00:00:00 GMT'
|
||||
assert records[3]['value'] == 10.0
|
||||
@ -455,7 +348,7 @@ class TestEditActivityWithoutGpx:
|
||||
)
|
||||
|
||||
response = client.patch(
|
||||
'/api/activities/1',
|
||||
f'/api/activities/{activity_cycling_user_2.uuid}',
|
||||
content_type='application/json',
|
||||
data=json.dumps(
|
||||
dict(
|
||||
@ -485,6 +378,7 @@ class TestEditActivityWithoutGpx:
|
||||
sport_2_running,
|
||||
activity_cycling_user_1,
|
||||
):
|
||||
activity_uuid = activity_cycling_user_1.uuid.hex
|
||||
client = app.test_client()
|
||||
resp_login = client.post(
|
||||
'/api/auth/login',
|
||||
@ -493,7 +387,7 @@ class TestEditActivityWithoutGpx:
|
||||
)
|
||||
|
||||
response = client.patch(
|
||||
'/api/activities/1',
|
||||
f'/api/activities/{activity_uuid}',
|
||||
content_type='application/json',
|
||||
data=json.dumps(
|
||||
dict(
|
||||
@ -520,7 +414,7 @@ class TestEditActivityWithoutGpx:
|
||||
== 'Tue, 15 May 2018 13:05:00 GMT'
|
||||
)
|
||||
assert data['data']['activities'][0]['user'] == 'test'
|
||||
assert data['data']['activities'][0]['sport_id'] == 2
|
||||
assert data['data']['activities'][0]['sport_id'] == sport_2_running.id
|
||||
assert data['data']['activities'][0]['duration'] == '1:00:00'
|
||||
assert data['data']['activities'][0]['title'] == 'Activity test'
|
||||
assert data['data']['activities'][0]['ascent'] is None
|
||||
@ -536,23 +430,23 @@ class TestEditActivityWithoutGpx:
|
||||
|
||||
records = data['data']['activities'][0]['records']
|
||||
assert len(records) == 4
|
||||
assert records[0]['sport_id'] == 2
|
||||
assert records[0]['activity_id'] == 1
|
||||
assert records[0]['sport_id'] == sport_2_running.id
|
||||
assert records[0]['activity_id'] == activity_uuid
|
||||
assert records[0]['record_type'] == 'MS'
|
||||
assert records[0]['activity_date'] == 'Tue, 15 May 2018 13:05:00 GMT'
|
||||
assert records[0]['value'] == 8.0
|
||||
assert records[1]['sport_id'] == 2
|
||||
assert records[1]['activity_id'] == 1
|
||||
assert records[1]['sport_id'] == sport_2_running.id
|
||||
assert records[1]['activity_id'] == activity_uuid
|
||||
assert records[1]['record_type'] == 'LD'
|
||||
assert records[1]['activity_date'] == 'Tue, 15 May 2018 13:05:00 GMT'
|
||||
assert records[1]['value'] == '1:00:00'
|
||||
assert records[2]['sport_id'] == 2
|
||||
assert records[2]['activity_id'] == 1
|
||||
assert records[2]['sport_id'] == sport_2_running.id
|
||||
assert records[2]['activity_id'] == activity_uuid
|
||||
assert records[2]['record_type'] == 'FD'
|
||||
assert records[2]['activity_date'] == 'Tue, 15 May 2018 13:05:00 GMT'
|
||||
assert records[2]['value'] == 8.0
|
||||
assert records[3]['sport_id'] == 2
|
||||
assert records[3]['activity_id'] == 1
|
||||
assert records[3]['sport_id'] == sport_2_running.id
|
||||
assert records[3]['activity_id'] == activity_uuid
|
||||
assert records[3]['record_type'] == 'AS'
|
||||
assert records[3]['activity_date'] == 'Tue, 15 May 2018 13:05:00 GMT'
|
||||
assert records[3]['value'] == 8.0
|
||||
@ -565,6 +459,7 @@ class TestEditActivityWithoutGpx:
|
||||
sport_2_running,
|
||||
activity_cycling_user_1,
|
||||
):
|
||||
activity_uuid = activity_cycling_user_1.uuid.hex
|
||||
client = app.test_client()
|
||||
resp_login = client.post(
|
||||
'/api/auth/login',
|
||||
@ -573,7 +468,7 @@ class TestEditActivityWithoutGpx:
|
||||
)
|
||||
|
||||
response = client.patch(
|
||||
'/api/activities/1',
|
||||
f'/api/activities/{activity_uuid}',
|
||||
content_type='application/json',
|
||||
data=json.dumps(dict(sport_id=2, distance=20)),
|
||||
headers=dict(
|
||||
@ -592,7 +487,7 @@ class TestEditActivityWithoutGpx:
|
||||
== 'Mon, 01 Jan 2018 00:00:00 GMT'
|
||||
)
|
||||
assert data['data']['activities'][0]['user'] == 'test'
|
||||
assert data['data']['activities'][0]['sport_id'] == 2
|
||||
assert data['data']['activities'][0]['sport_id'] == sport_2_running.id
|
||||
assert data['data']['activities'][0]['duration'] == '1:00:00'
|
||||
assert data['data']['activities'][0]['title'] is None
|
||||
assert data['data']['activities'][0]['ascent'] is None
|
||||
@ -608,23 +503,23 @@ class TestEditActivityWithoutGpx:
|
||||
|
||||
records = data['data']['activities'][0]['records']
|
||||
assert len(records) == 4
|
||||
assert records[0]['sport_id'] == 2
|
||||
assert records[0]['activity_id'] == 1
|
||||
assert records[0]['sport_id'] == sport_2_running.id
|
||||
assert records[0]['activity_id'] == activity_uuid
|
||||
assert records[0]['record_type'] == 'MS'
|
||||
assert records[0]['activity_date'] == 'Mon, 01 Jan 2018 00:00:00 GMT'
|
||||
assert records[0]['value'] == 20.0
|
||||
assert records[1]['sport_id'] == 2
|
||||
assert records[1]['activity_id'] == 1
|
||||
assert records[1]['sport_id'] == sport_2_running.id
|
||||
assert records[1]['activity_id'] == activity_uuid
|
||||
assert records[1]['record_type'] == 'LD'
|
||||
assert records[1]['activity_date'] == 'Mon, 01 Jan 2018 00:00:00 GMT'
|
||||
assert records[1]['value'] == '1:00:00'
|
||||
assert records[2]['sport_id'] == 2
|
||||
assert records[2]['activity_id'] == 1
|
||||
assert records[2]['sport_id'] == sport_2_running.id
|
||||
assert records[2]['activity_id'] == activity_uuid
|
||||
assert records[2]['record_type'] == 'FD'
|
||||
assert records[2]['activity_date'] == 'Mon, 01 Jan 2018 00:00:00 GMT'
|
||||
assert records[2]['value'] == 20.0
|
||||
assert records[3]['sport_id'] == 2
|
||||
assert records[3]['activity_id'] == 1
|
||||
assert records[3]['sport_id'] == sport_2_running.id
|
||||
assert records[3]['activity_id'] == activity_uuid
|
||||
assert records[3]['record_type'] == 'AS'
|
||||
assert records[3]['activity_date'] == 'Mon, 01 Jan 2018 00:00:00 GMT'
|
||||
assert records[3]['value'] == 20.0
|
||||
@ -640,7 +535,7 @@ class TestEditActivityWithoutGpx:
|
||||
)
|
||||
|
||||
response = client.patch(
|
||||
'/api/activities/1',
|
||||
f'/api/activities/{activity_cycling_user_1.uuid}',
|
||||
content_type='application/json',
|
||||
data=json.dumps(dict()),
|
||||
headers=dict(
|
||||
@ -664,7 +559,7 @@ class TestEditActivityWithoutGpx:
|
||||
content_type='application/json',
|
||||
)
|
||||
response = client.patch(
|
||||
'/api/activities/1',
|
||||
f'/api/activities/{activity_cycling_user_1.uuid}',
|
||||
content_type='application/json',
|
||||
data=json.dumps(
|
||||
dict(
|
||||
@ -689,7 +584,7 @@ class TestEditActivityWithoutGpx:
|
||||
in data['message']
|
||||
)
|
||||
|
||||
def test_it_returns_404_if_edited_activity_doens_not_exists(
|
||||
def test_it_returns_404_if_edited_activity_does_not_exists(
|
||||
self, app, user_1, sport_1_cycling
|
||||
):
|
||||
client = app.test_client()
|
||||
@ -699,7 +594,7 @@ class TestEditActivityWithoutGpx:
|
||||
content_type='application/json',
|
||||
)
|
||||
response = client.patch(
|
||||
'/api/activities/1',
|
||||
f'/api/activities/{uuid4().hex}',
|
||||
content_type='application/json',
|
||||
data=json.dumps(
|
||||
dict(
|
||||
@ -725,38 +620,19 @@ class TestRefreshActivityWithGpx:
|
||||
def test_refresh_an_activity_with_gpx(
|
||||
self, app, user_1, sport_1_cycling, sport_2_running, gpx_file
|
||||
):
|
||||
token, activity_uuid = post_an_activity(app, gpx_file)
|
||||
client = app.test_client()
|
||||
resp_login = client.post(
|
||||
'/api/auth/login',
|
||||
data=json.dumps(dict(email='test@test.com', password='12345678')),
|
||||
content_type='application/json',
|
||||
)
|
||||
client.post(
|
||||
'/api/activities',
|
||||
data=dict(
|
||||
file=(BytesIO(str.encode(gpx_file)), 'example.gpx'),
|
||||
data='{"sport_id": 1}',
|
||||
),
|
||||
headers=dict(
|
||||
content_type='multipart/form-data',
|
||||
Authorization='Bearer '
|
||||
+ json.loads(resp_login.data.decode())['auth_token'],
|
||||
),
|
||||
)
|
||||
|
||||
# Edit some activity data
|
||||
activity = Activity.query.filter_by(id=1).first()
|
||||
activity = Activity.query.filter_by(uuid=activity_uuid).first()
|
||||
activity.ascent = 1000
|
||||
activity.min_alt = -100
|
||||
|
||||
response = client.patch(
|
||||
'/api/activities/1',
|
||||
f'/api/activities/{activity_uuid}',
|
||||
content_type='application/json',
|
||||
data=json.dumps(dict(refresh=True)),
|
||||
headers=dict(
|
||||
Authorization='Bearer '
|
||||
+ json.loads(resp_login.data.decode())['auth_token']
|
||||
),
|
||||
headers=dict(Authorization=f'Bearer {token}'),
|
||||
)
|
||||
data = json.loads(response.data.decode())
|
||||
|
||||
|
@ -1,10 +1,12 @@
|
||||
import json
|
||||
import os
|
||||
from io import BytesIO
|
||||
from uuid import uuid4
|
||||
|
||||
from fittrackee.activities.models import Activity
|
||||
from fittrackee.activities.utils import get_absolute_file_path
|
||||
|
||||
from .utils import post_an_activity
|
||||
|
||||
|
||||
def get_gpx_filepath(activity_id):
|
||||
activity = Activity.query.filter_by(id=activity_id).first()
|
||||
@ -15,30 +17,12 @@ class TestDeleteActivityWithGpx:
|
||||
def test_it_deletes_an_activity_with_gpx(
|
||||
self, app, user_1, sport_1_cycling, gpx_file
|
||||
):
|
||||
token, activity_uuid = post_an_activity(app, gpx_file)
|
||||
client = app.test_client()
|
||||
resp_login = client.post(
|
||||
'/api/auth/login',
|
||||
data=json.dumps(dict(email='test@test.com', password='12345678')),
|
||||
content_type='application/json',
|
||||
)
|
||||
client.post(
|
||||
'/api/activities',
|
||||
data=dict(
|
||||
file=(BytesIO(str.encode(gpx_file)), 'example.gpx'),
|
||||
data='{"sport_id": 1}',
|
||||
),
|
||||
headers=dict(
|
||||
content_type='multipart/form-data',
|
||||
Authorization='Bearer '
|
||||
+ json.loads(resp_login.data.decode())['auth_token'],
|
||||
),
|
||||
)
|
||||
|
||||
response = client.delete(
|
||||
'/api/activities/1',
|
||||
headers=dict(
|
||||
Authorization='Bearer '
|
||||
+ json.loads(resp_login.data.decode())['auth_token']
|
||||
),
|
||||
f'/api/activities/{activity_uuid}',
|
||||
headers=dict(Authorization=f'Bearer {token}'),
|
||||
)
|
||||
|
||||
assert response.status_code == 204
|
||||
@ -46,31 +30,16 @@ class TestDeleteActivityWithGpx:
|
||||
def test_it_returns_403_when_deleting_an_activity_from_different_user(
|
||||
self, app, user_1, user_2, sport_1_cycling, gpx_file
|
||||
):
|
||||
_, activity_uuid = post_an_activity(app, gpx_file)
|
||||
client = app.test_client()
|
||||
resp_login = client.post(
|
||||
'/api/auth/login',
|
||||
data=json.dumps(dict(email='test@test.com', password='12345678')),
|
||||
content_type='application/json',
|
||||
)
|
||||
client.post(
|
||||
'/api/activities',
|
||||
data=dict(
|
||||
file=(BytesIO(str.encode(gpx_file)), 'example.gpx'),
|
||||
data='{"sport_id": 1}',
|
||||
),
|
||||
headers=dict(
|
||||
content_type='multipart/form-data',
|
||||
Authorization='Bearer '
|
||||
+ json.loads(resp_login.data.decode())['auth_token'],
|
||||
),
|
||||
)
|
||||
resp_login = client.post(
|
||||
'/api/auth/login',
|
||||
data=json.dumps(dict(email='toto@toto.com', password='87654321')),
|
||||
content_type='application/json',
|
||||
)
|
||||
|
||||
response = client.delete(
|
||||
'/api/activities/1',
|
||||
f'/api/activities/{activity_uuid}',
|
||||
headers=dict(
|
||||
Authorization='Bearer '
|
||||
+ json.loads(resp_login.data.decode())['auth_token']
|
||||
@ -91,7 +60,7 @@ class TestDeleteActivityWithGpx:
|
||||
content_type='application/json',
|
||||
)
|
||||
response = client.delete(
|
||||
'/api/activities/9999',
|
||||
f'/api/activities/{uuid4().hex}',
|
||||
headers=dict(
|
||||
Authorization='Bearer '
|
||||
+ json.loads(resp_login.data.decode())['auth_token']
|
||||
@ -104,35 +73,15 @@ class TestDeleteActivityWithGpx:
|
||||
def test_it_returns_500_when_deleting_an_activity_with_gpx_invalid_file(
|
||||
self, app, user_1, sport_1_cycling, gpx_file
|
||||
):
|
||||
token, activity_uuid = post_an_activity(app, gpx_file)
|
||||
client = app.test_client()
|
||||
resp_login = client.post(
|
||||
'/api/auth/login',
|
||||
data=json.dumps(dict(email='test@test.com', password='12345678')),
|
||||
content_type='application/json',
|
||||
)
|
||||
client.post(
|
||||
'/api/activities',
|
||||
data=dict(
|
||||
file=(BytesIO(str.encode(gpx_file)), 'example.gpx'),
|
||||
data='{"sport_id": 1}',
|
||||
),
|
||||
headers=dict(
|
||||
content_type='multipart/form-data',
|
||||
Authorization='Bearer '
|
||||
+ json.loads(resp_login.data.decode())['auth_token'],
|
||||
),
|
||||
)
|
||||
|
||||
gpx_filepath = get_gpx_filepath(1)
|
||||
gpx_filepath = get_absolute_file_path(gpx_filepath)
|
||||
os.remove(gpx_filepath)
|
||||
|
||||
response = client.delete(
|
||||
'/api/activities/1',
|
||||
headers=dict(
|
||||
Authorization='Bearer '
|
||||
+ json.loads(resp_login.data.decode())['auth_token']
|
||||
),
|
||||
f'/api/activities/{activity_uuid}',
|
||||
headers=dict(Authorization=f'Bearer {token}'),
|
||||
)
|
||||
|
||||
data = json.loads(response.data.decode())
|
||||
@ -156,7 +105,7 @@ class TestDeleteActivityWithoutGpx:
|
||||
content_type='application/json',
|
||||
)
|
||||
response = client.delete(
|
||||
'/api/activities/1',
|
||||
f'/api/activities/{activity_cycling_user_1.uuid}',
|
||||
headers=dict(
|
||||
Authorization='Bearer '
|
||||
+ json.loads(resp_login.data.decode())['auth_token']
|
||||
@ -174,7 +123,7 @@ class TestDeleteActivityWithoutGpx:
|
||||
content_type='application/json',
|
||||
)
|
||||
response = client.delete(
|
||||
'/api/activities/1',
|
||||
f'/api/activities/{activity_cycling_user_1.uuid}',
|
||||
headers=dict(
|
||||
Authorization='Bearer '
|
||||
+ json.loads(resp_login.data.decode())['auth_token']
|
||||
|
@ -1,3 +1,6 @@
|
||||
from .utils import is_valid_uuid
|
||||
|
||||
|
||||
class TestActivityModel:
|
||||
def test_activity_model(
|
||||
self, app, sport_1_cycling, user_1, activity_cycling_user_1
|
||||
@ -5,6 +8,7 @@ class TestActivityModel:
|
||||
activity_cycling_user_1.title = 'Test'
|
||||
|
||||
assert 1 == activity_cycling_user_1.id
|
||||
assert activity_cycling_user_1.uuid is not None
|
||||
assert 1 == activity_cycling_user_1.user_id
|
||||
assert 1 == activity_cycling_user_1.sport_id
|
||||
assert '2018-01-01 00:00:00' == str(
|
||||
@ -18,7 +22,7 @@ class TestActivityModel:
|
||||
)
|
||||
|
||||
serialized_activity = activity_cycling_user_1.serialize()
|
||||
assert 1 == serialized_activity['id']
|
||||
assert is_valid_uuid(serialized_activity['id'])
|
||||
assert 'test' == serialized_activity['user']
|
||||
assert 1 == serialized_activity['sport_id']
|
||||
assert serialized_activity['title'] == 'Test'
|
||||
@ -55,6 +59,8 @@ class TestActivityModel:
|
||||
activity_cycling_user_1,
|
||||
activity_cycling_user_1_segment,
|
||||
):
|
||||
assert '<Segment \'0\' for activity \'1\'>' == str(
|
||||
activity_cycling_user_1_segment
|
||||
assert (
|
||||
f'<Segment \'{activity_cycling_user_1_segment.segment_id}\' '
|
||||
f'for activity \'{activity_cycling_user_1.uuid.hex}\'>'
|
||||
== str(activity_cycling_user_1_segment)
|
||||
)
|
||||
|
@ -36,8 +36,11 @@ class TestGetRecords:
|
||||
== data['data']['records'][0]['activity_date']
|
||||
)
|
||||
assert 'test' == data['data']['records'][0]['user']
|
||||
assert 1 == data['data']['records'][0]['sport_id']
|
||||
assert 1 == data['data']['records'][0]['activity_id']
|
||||
assert sport_1_cycling.id == data['data']['records'][0]['sport_id']
|
||||
assert (
|
||||
activity_cycling_user_1.uuid.hex
|
||||
== data['data']['records'][0]['activity_id']
|
||||
)
|
||||
assert 'AS' == data['data']['records'][0]['record_type']
|
||||
assert 'value' in data['data']['records'][0]
|
||||
|
||||
@ -46,8 +49,11 @@ class TestGetRecords:
|
||||
== data['data']['records'][1]['activity_date']
|
||||
)
|
||||
assert 'test' == data['data']['records'][1]['user']
|
||||
assert 1 == data['data']['records'][1]['sport_id']
|
||||
assert 1 == data['data']['records'][1]['activity_id']
|
||||
assert sport_1_cycling.id == data['data']['records'][1]['sport_id']
|
||||
assert (
|
||||
activity_cycling_user_1.uuid.hex
|
||||
== data['data']['records'][1]['activity_id']
|
||||
)
|
||||
assert 'FD' == data['data']['records'][1]['record_type']
|
||||
assert 'value' in data['data']['records'][1]
|
||||
|
||||
@ -56,8 +62,11 @@ class TestGetRecords:
|
||||
== data['data']['records'][2]['activity_date']
|
||||
)
|
||||
assert 'test' == data['data']['records'][2]['user']
|
||||
assert 1 == data['data']['records'][2]['sport_id']
|
||||
assert 1 == data['data']['records'][2]['activity_id']
|
||||
assert sport_1_cycling.id == data['data']['records'][2]['sport_id']
|
||||
assert (
|
||||
activity_cycling_user_1.uuid.hex
|
||||
== data['data']['records'][2]['activity_id']
|
||||
)
|
||||
assert 'LD' == data['data']['records'][2]['record_type']
|
||||
assert 'value' in data['data']['records'][2]
|
||||
|
||||
@ -66,8 +75,11 @@ class TestGetRecords:
|
||||
== data['data']['records'][3]['activity_date']
|
||||
) # noqa
|
||||
assert 'test' == data['data']['records'][3]['user']
|
||||
assert 1 == data['data']['records'][3]['sport_id']
|
||||
assert 1 == data['data']['records'][3]['activity_id']
|
||||
assert sport_1_cycling.id == data['data']['records'][3]['sport_id']
|
||||
assert (
|
||||
activity_cycling_user_1.uuid.hex
|
||||
== data['data']['records'][3]['activity_id']
|
||||
)
|
||||
assert 'MS' == data['data']['records'][3]['record_type']
|
||||
assert 'value' in data['data']['records'][3]
|
||||
|
||||
@ -147,7 +159,7 @@ class TestGetRecords:
|
||||
data=json.dumps(dict(email='test@test.com', password='12345678')),
|
||||
content_type='application/json',
|
||||
)
|
||||
client.post(
|
||||
response = client.post(
|
||||
'/api/activities/no_gpx',
|
||||
content_type='application/json',
|
||||
data=json.dumps(
|
||||
@ -164,6 +176,8 @@ class TestGetRecords:
|
||||
+ json.loads(resp_login.data.decode())['auth_token']
|
||||
),
|
||||
)
|
||||
data = json.loads(response.data.decode())
|
||||
activity_1_uuid = data['data']['activities'][0]['id']
|
||||
response = client.get(
|
||||
'/api/records',
|
||||
headers=dict(
|
||||
@ -182,8 +196,8 @@ class TestGetRecords:
|
||||
== data['data']['records'][0]['activity_date']
|
||||
) # noqa
|
||||
assert 'test' == data['data']['records'][0]['user']
|
||||
assert 1 == data['data']['records'][0]['sport_id']
|
||||
assert 1 == data['data']['records'][0]['activity_id']
|
||||
assert sport_1_cycling.id == data['data']['records'][0]['sport_id']
|
||||
assert activity_1_uuid == data['data']['records'][0]['activity_id']
|
||||
assert 'AS' == data['data']['records'][0]['record_type']
|
||||
assert 7.0 == data['data']['records'][0]['value']
|
||||
|
||||
@ -192,8 +206,8 @@ class TestGetRecords:
|
||||
== data['data']['records'][1]['activity_date']
|
||||
) # noqa
|
||||
assert 'test' == data['data']['records'][1]['user']
|
||||
assert 1 == data['data']['records'][1]['sport_id']
|
||||
assert 1 == data['data']['records'][1]['activity_id']
|
||||
assert sport_1_cycling.id == data['data']['records'][1]['sport_id']
|
||||
assert activity_1_uuid == data['data']['records'][1]['activity_id']
|
||||
assert 'FD' == data['data']['records'][1]['record_type']
|
||||
assert 7.0 == data['data']['records'][1]['value']
|
||||
|
||||
@ -202,8 +216,8 @@ class TestGetRecords:
|
||||
== data['data']['records'][2]['activity_date']
|
||||
) # noqa
|
||||
assert 'test' == data['data']['records'][2]['user']
|
||||
assert 1 == data['data']['records'][2]['sport_id']
|
||||
assert 1 == data['data']['records'][2]['activity_id']
|
||||
assert sport_1_cycling.id == data['data']['records'][2]['sport_id']
|
||||
assert activity_1_uuid == data['data']['records'][2]['activity_id']
|
||||
assert 'LD' == data['data']['records'][2]['record_type']
|
||||
assert '1:00:00' == data['data']['records'][2]['value']
|
||||
|
||||
@ -212,14 +226,14 @@ class TestGetRecords:
|
||||
== data['data']['records'][3]['activity_date']
|
||||
) # noqa
|
||||
assert 'test' == data['data']['records'][3]['user']
|
||||
assert 1 == data['data']['records'][3]['sport_id']
|
||||
assert 1 == data['data']['records'][3]['activity_id']
|
||||
assert sport_1_cycling.id == data['data']['records'][3]['sport_id']
|
||||
assert activity_1_uuid == data['data']['records'][3]['activity_id']
|
||||
assert 'MS' == data['data']['records'][3]['record_type']
|
||||
assert 7.0 == data['data']['records'][3]['value']
|
||||
|
||||
# Post activity with lower duration (same sport)
|
||||
# => 2 new records: Average speed and Max speed
|
||||
client.post(
|
||||
response = client.post(
|
||||
'/api/activities/no_gpx',
|
||||
content_type='application/json',
|
||||
data=json.dumps(
|
||||
@ -236,6 +250,8 @@ class TestGetRecords:
|
||||
+ json.loads(resp_login.data.decode())['auth_token']
|
||||
),
|
||||
)
|
||||
data = json.loads(response.data.decode())
|
||||
activity_2_uuid = data['data']['activities'][0]['id']
|
||||
response = client.get(
|
||||
'/api/records',
|
||||
headers=dict(
|
||||
@ -254,8 +270,8 @@ class TestGetRecords:
|
||||
== data['data']['records'][0]['activity_date']
|
||||
) # noqa
|
||||
assert 'test' == data['data']['records'][0]['user']
|
||||
assert 1 == data['data']['records'][0]['sport_id']
|
||||
assert 2 == data['data']['records'][0]['activity_id']
|
||||
assert sport_1_cycling.id == data['data']['records'][0]['sport_id']
|
||||
assert activity_2_uuid == data['data']['records'][0]['activity_id']
|
||||
assert 'AS' == data['data']['records'][0]['record_type']
|
||||
assert 8.4 == data['data']['records'][0]['value']
|
||||
|
||||
@ -264,8 +280,8 @@ class TestGetRecords:
|
||||
== data['data']['records'][1]['activity_date']
|
||||
) # noqa
|
||||
assert 'test' == data['data']['records'][1]['user']
|
||||
assert 1 == data['data']['records'][1]['sport_id']
|
||||
assert 1 == data['data']['records'][1]['activity_id']
|
||||
assert sport_1_cycling.id == data['data']['records'][1]['sport_id']
|
||||
assert activity_1_uuid == data['data']['records'][1]['activity_id']
|
||||
assert 'FD' == data['data']['records'][1]['record_type']
|
||||
assert 7.0 == data['data']['records'][1]['value']
|
||||
|
||||
@ -274,8 +290,8 @@ class TestGetRecords:
|
||||
== data['data']['records'][2]['activity_date']
|
||||
) # noqa
|
||||
assert 'test' == data['data']['records'][2]['user']
|
||||
assert 1 == data['data']['records'][2]['sport_id']
|
||||
assert 1 == data['data']['records'][2]['activity_id']
|
||||
assert sport_1_cycling.id == data['data']['records'][2]['sport_id']
|
||||
assert activity_1_uuid == data['data']['records'][2]['activity_id']
|
||||
assert 'LD' == data['data']['records'][2]['record_type']
|
||||
assert '1:00:00' == data['data']['records'][2]['value']
|
||||
|
||||
@ -284,13 +300,13 @@ class TestGetRecords:
|
||||
== data['data']['records'][0]['activity_date']
|
||||
) # noqa
|
||||
assert 'test' == data['data']['records'][0]['user']
|
||||
assert 1 == data['data']['records'][0]['sport_id']
|
||||
assert 2 == data['data']['records'][0]['activity_id']
|
||||
assert sport_1_cycling.id == data['data']['records'][0]['sport_id']
|
||||
assert activity_2_uuid == data['data']['records'][0]['activity_id']
|
||||
assert 'MS' == data['data']['records'][3]['record_type']
|
||||
assert 8.4 == data['data']['records'][3]['value']
|
||||
|
||||
# Post activity with no new records
|
||||
client.post(
|
||||
response = client.post(
|
||||
'/api/activities/no_gpx',
|
||||
content_type='application/json',
|
||||
data=json.dumps(
|
||||
@ -307,6 +323,8 @@ class TestGetRecords:
|
||||
+ json.loads(resp_login.data.decode())['auth_token']
|
||||
),
|
||||
)
|
||||
data = json.loads(response.data.decode())
|
||||
activity_3_uuid = data['data']['activities'][0]['id']
|
||||
response = client.get(
|
||||
'/api/records',
|
||||
headers=dict(
|
||||
@ -325,8 +343,8 @@ class TestGetRecords:
|
||||
== data['data']['records'][0]['activity_date']
|
||||
) # noqa
|
||||
assert 'test' == data['data']['records'][0]['user']
|
||||
assert 1 == data['data']['records'][0]['sport_id']
|
||||
assert 2 == data['data']['records'][0]['activity_id']
|
||||
assert sport_1_cycling.id == data['data']['records'][0]['sport_id']
|
||||
assert activity_2_uuid == data['data']['records'][0]['activity_id']
|
||||
assert 'AS' == data['data']['records'][0]['record_type']
|
||||
assert 8.4 == data['data']['records'][0]['value']
|
||||
|
||||
@ -335,8 +353,8 @@ class TestGetRecords:
|
||||
== data['data']['records'][1]['activity_date']
|
||||
) # noqa
|
||||
assert 'test' == data['data']['records'][1]['user']
|
||||
assert 1 == data['data']['records'][1]['sport_id']
|
||||
assert 1 == data['data']['records'][1]['activity_id']
|
||||
assert sport_1_cycling.id == data['data']['records'][1]['sport_id']
|
||||
assert activity_1_uuid == data['data']['records'][1]['activity_id']
|
||||
assert 'FD' == data['data']['records'][1]['record_type']
|
||||
assert 7.0 == data['data']['records'][1]['value']
|
||||
|
||||
@ -345,8 +363,8 @@ class TestGetRecords:
|
||||
== data['data']['records'][2]['activity_date']
|
||||
) # noqa
|
||||
assert 'test' == data['data']['records'][2]['user']
|
||||
assert 1 == data['data']['records'][2]['sport_id']
|
||||
assert 1 == data['data']['records'][2]['activity_id']
|
||||
assert sport_1_cycling.id == data['data']['records'][2]['sport_id']
|
||||
assert activity_1_uuid == data['data']['records'][2]['activity_id']
|
||||
assert 'LD' == data['data']['records'][2]['record_type']
|
||||
assert '1:00:00' == data['data']['records'][2]['value']
|
||||
|
||||
@ -355,15 +373,15 @@ class TestGetRecords:
|
||||
== data['data']['records'][0]['activity_date']
|
||||
) # noqa
|
||||
assert 'test' == data['data']['records'][0]['user']
|
||||
assert 1 == data['data']['records'][0]['sport_id']
|
||||
assert 2 == data['data']['records'][0]['activity_id']
|
||||
assert sport_1_cycling.id == data['data']['records'][0]['sport_id']
|
||||
assert activity_2_uuid == data['data']['records'][0]['activity_id']
|
||||
assert 'MS' == data['data']['records'][3]['record_type']
|
||||
assert 8.4 == data['data']['records'][3]['value']
|
||||
|
||||
# Edit last activity
|
||||
# 1 new record: Longest duration
|
||||
client.patch(
|
||||
'/api/activities/3',
|
||||
f'/api/activities/{activity_3_uuid}',
|
||||
content_type='application/json',
|
||||
data=json.dumps(dict(duration=4000)),
|
||||
headers=dict(
|
||||
@ -389,8 +407,8 @@ class TestGetRecords:
|
||||
== data['data']['records'][0]['activity_date']
|
||||
) # noqa
|
||||
assert 'test' == data['data']['records'][0]['user']
|
||||
assert 1 == data['data']['records'][0]['sport_id']
|
||||
assert 2 == data['data']['records'][0]['activity_id']
|
||||
assert sport_1_cycling.id == data['data']['records'][0]['sport_id']
|
||||
assert activity_2_uuid == data['data']['records'][0]['activity_id']
|
||||
assert 'AS' == data['data']['records'][0]['record_type']
|
||||
assert 8.4 == data['data']['records'][0]['value']
|
||||
|
||||
@ -399,8 +417,8 @@ class TestGetRecords:
|
||||
== data['data']['records'][1]['activity_date']
|
||||
) # noqa
|
||||
assert 'test' == data['data']['records'][1]['user']
|
||||
assert 1 == data['data']['records'][1]['sport_id']
|
||||
assert 1 == data['data']['records'][1]['activity_id']
|
||||
assert sport_1_cycling.id == data['data']['records'][1]['sport_id']
|
||||
assert activity_1_uuid == data['data']['records'][1]['activity_id']
|
||||
assert 'FD' == data['data']['records'][1]['record_type']
|
||||
assert 7.0 == data['data']['records'][1]['value']
|
||||
|
||||
@ -409,8 +427,8 @@ class TestGetRecords:
|
||||
== data['data']['records'][2]['activity_date']
|
||||
) # noqa
|
||||
assert 'test' == data['data']['records'][2]['user']
|
||||
assert 1 == data['data']['records'][2]['sport_id']
|
||||
assert 3 == data['data']['records'][2]['activity_id']
|
||||
assert sport_1_cycling.id == data['data']['records'][2]['sport_id']
|
||||
assert activity_3_uuid == data['data']['records'][2]['activity_id']
|
||||
assert 'LD' == data['data']['records'][2]['record_type']
|
||||
assert '1:06:40' == data['data']['records'][2]['value']
|
||||
|
||||
@ -419,14 +437,14 @@ class TestGetRecords:
|
||||
== data['data']['records'][0]['activity_date']
|
||||
) # noqa
|
||||
assert 'test' == data['data']['records'][0]['user']
|
||||
assert 1 == data['data']['records'][0]['sport_id']
|
||||
assert 2 == data['data']['records'][0]['activity_id']
|
||||
assert sport_1_cycling.id == data['data']['records'][0]['sport_id']
|
||||
assert activity_2_uuid == data['data']['records'][0]['activity_id']
|
||||
assert 'MS' == data['data']['records'][3]['record_type']
|
||||
assert 8.4 == data['data']['records'][3]['value']
|
||||
|
||||
# delete activity 2 => AS and MS record update
|
||||
client.delete(
|
||||
'/api/activities/2',
|
||||
f'/api/activities/{activity_2_uuid}',
|
||||
headers=dict(
|
||||
Authorization='Bearer '
|
||||
+ json.loads(resp_login.data.decode())['auth_token']
|
||||
@ -450,8 +468,8 @@ class TestGetRecords:
|
||||
== data['data']['records'][0]['activity_date']
|
||||
) # noqa
|
||||
assert 'test' == data['data']['records'][0]['user']
|
||||
assert 1 == data['data']['records'][0]['sport_id']
|
||||
assert 1 == data['data']['records'][0]['activity_id']
|
||||
assert sport_1_cycling.id == data['data']['records'][0]['sport_id']
|
||||
assert activity_1_uuid == data['data']['records'][0]['activity_id']
|
||||
assert 'AS' == data['data']['records'][0]['record_type']
|
||||
assert 7.0 == data['data']['records'][0]['value']
|
||||
|
||||
@ -460,8 +478,8 @@ class TestGetRecords:
|
||||
== data['data']['records'][1]['activity_date']
|
||||
) # noqa
|
||||
assert 'test' == data['data']['records'][1]['user']
|
||||
assert 1 == data['data']['records'][1]['sport_id']
|
||||
assert 1 == data['data']['records'][1]['activity_id']
|
||||
assert sport_1_cycling.id == data['data']['records'][1]['sport_id']
|
||||
assert activity_1_uuid == data['data']['records'][1]['activity_id']
|
||||
assert 'FD' == data['data']['records'][1]['record_type']
|
||||
assert 7.0 == data['data']['records'][1]['value']
|
||||
|
||||
@ -470,8 +488,8 @@ class TestGetRecords:
|
||||
== data['data']['records'][2]['activity_date']
|
||||
) # noqa
|
||||
assert 'test' == data['data']['records'][2]['user']
|
||||
assert 1 == data['data']['records'][2]['sport_id']
|
||||
assert 3 == data['data']['records'][2]['activity_id']
|
||||
assert sport_1_cycling.id == data['data']['records'][2]['sport_id']
|
||||
assert activity_3_uuid == data['data']['records'][2]['activity_id']
|
||||
assert 'LD' == data['data']['records'][2]['record_type']
|
||||
assert '1:06:40' == data['data']['records'][2]['value']
|
||||
|
||||
@ -480,14 +498,14 @@ class TestGetRecords:
|
||||
== data['data']['records'][3]['activity_date']
|
||||
) # noqa
|
||||
assert 'test' == data['data']['records'][3]['user']
|
||||
assert 1 == data['data']['records'][3]['sport_id']
|
||||
assert 1 == data['data']['records'][3]['activity_id']
|
||||
assert sport_1_cycling.id == data['data']['records'][3]['sport_id']
|
||||
assert activity_1_uuid == data['data']['records'][3]['activity_id']
|
||||
assert 'MS' == data['data']['records'][3]['record_type']
|
||||
assert 7.0 == data['data']['records'][3]['value']
|
||||
|
||||
# add an activity with the same data as activity 1 except with a
|
||||
# later date => no change in record
|
||||
client.post(
|
||||
response = client.post(
|
||||
'/api/activities/no_gpx',
|
||||
content_type='application/json',
|
||||
data=json.dumps(
|
||||
@ -504,6 +522,8 @@ class TestGetRecords:
|
||||
+ json.loads(resp_login.data.decode())['auth_token']
|
||||
),
|
||||
)
|
||||
data = json.loads(response.data.decode())
|
||||
activity_4_uuid = data['data']['activities'][0]['id']
|
||||
response = client.get(
|
||||
'/api/records',
|
||||
headers=dict(
|
||||
@ -522,8 +542,8 @@ class TestGetRecords:
|
||||
== data['data']['records'][0]['activity_date']
|
||||
) # noqa
|
||||
assert 'test' == data['data']['records'][0]['user']
|
||||
assert 1 == data['data']['records'][0]['sport_id']
|
||||
assert 1 == data['data']['records'][0]['activity_id']
|
||||
assert sport_1_cycling.id == data['data']['records'][0]['sport_id']
|
||||
assert activity_1_uuid == data['data']['records'][0]['activity_id']
|
||||
assert 'AS' == data['data']['records'][0]['record_type']
|
||||
assert 7.0 == data['data']['records'][0]['value']
|
||||
|
||||
@ -532,8 +552,8 @@ class TestGetRecords:
|
||||
== data['data']['records'][1]['activity_date']
|
||||
) # noqa
|
||||
assert 'test' == data['data']['records'][1]['user']
|
||||
assert 1 == data['data']['records'][1]['sport_id']
|
||||
assert 1 == data['data']['records'][1]['activity_id']
|
||||
assert sport_1_cycling.id == data['data']['records'][1]['sport_id']
|
||||
assert activity_1_uuid == data['data']['records'][1]['activity_id']
|
||||
assert 'FD' == data['data']['records'][1]['record_type']
|
||||
assert 7.0 == data['data']['records'][1]['value']
|
||||
|
||||
@ -542,8 +562,8 @@ class TestGetRecords:
|
||||
== data['data']['records'][2]['activity_date']
|
||||
) # noqa
|
||||
assert 'test' == data['data']['records'][2]['user']
|
||||
assert 1 == data['data']['records'][2]['sport_id']
|
||||
assert 3 == data['data']['records'][2]['activity_id']
|
||||
assert sport_1_cycling.id == data['data']['records'][2]['sport_id']
|
||||
assert activity_3_uuid == data['data']['records'][2]['activity_id']
|
||||
assert 'LD' == data['data']['records'][2]['record_type']
|
||||
assert '1:06:40' == data['data']['records'][2]['value']
|
||||
|
||||
@ -552,8 +572,8 @@ class TestGetRecords:
|
||||
== data['data']['records'][3]['activity_date']
|
||||
) # noqa
|
||||
assert 'test' == data['data']['records'][3]['user']
|
||||
assert 1 == data['data']['records'][3]['sport_id']
|
||||
assert 1 == data['data']['records'][3]['activity_id']
|
||||
assert sport_1_cycling.id == data['data']['records'][3]['sport_id']
|
||||
assert activity_1_uuid == data['data']['records'][3]['activity_id']
|
||||
assert 'MS' == data['data']['records'][3]['record_type']
|
||||
assert 7.0 == data['data']['records'][3]['value']
|
||||
|
||||
@ -561,7 +581,7 @@ class TestGetRecords:
|
||||
# an earlier date
|
||||
# => record update (activity 5 replace activity 1)
|
||||
|
||||
client.post(
|
||||
response = client.post(
|
||||
'/api/activities/no_gpx',
|
||||
content_type='application/json',
|
||||
data=json.dumps(
|
||||
@ -578,6 +598,8 @@ class TestGetRecords:
|
||||
+ json.loads(resp_login.data.decode())['auth_token']
|
||||
),
|
||||
)
|
||||
data = json.loads(response.data.decode())
|
||||
activity_5_uuid = data['data']['activities'][0]['id']
|
||||
response = client.get(
|
||||
'/api/records',
|
||||
headers=dict(
|
||||
@ -596,8 +618,8 @@ class TestGetRecords:
|
||||
== data['data']['records'][0]['activity_date']
|
||||
) # noqa
|
||||
assert 'test' == data['data']['records'][0]['user']
|
||||
assert 1 == data['data']['records'][0]['sport_id']
|
||||
assert 5 == data['data']['records'][0]['activity_id']
|
||||
assert sport_1_cycling.id == data['data']['records'][0]['sport_id']
|
||||
assert activity_5_uuid == data['data']['records'][0]['activity_id']
|
||||
assert 'AS' == data['data']['records'][0]['record_type']
|
||||
assert 7.0 == data['data']['records'][0]['value']
|
||||
|
||||
@ -606,8 +628,8 @@ class TestGetRecords:
|
||||
== data['data']['records'][1]['activity_date']
|
||||
) # noqa
|
||||
assert 'test' == data['data']['records'][1]['user']
|
||||
assert 1 == data['data']['records'][1]['sport_id']
|
||||
assert 5 == data['data']['records'][1]['activity_id']
|
||||
assert sport_1_cycling.id == data['data']['records'][1]['sport_id']
|
||||
assert activity_5_uuid == data['data']['records'][1]['activity_id']
|
||||
assert 'FD' == data['data']['records'][1]['record_type']
|
||||
assert 7.0 == data['data']['records'][1]['value']
|
||||
|
||||
@ -616,8 +638,8 @@ class TestGetRecords:
|
||||
== data['data']['records'][2]['activity_date']
|
||||
) # noqa
|
||||
assert 'test' == data['data']['records'][2]['user']
|
||||
assert 1 == data['data']['records'][2]['sport_id']
|
||||
assert 3 == data['data']['records'][2]['activity_id']
|
||||
assert sport_1_cycling.id == data['data']['records'][2]['sport_id']
|
||||
assert activity_3_uuid == data['data']['records'][2]['activity_id']
|
||||
assert 'LD' == data['data']['records'][2]['record_type']
|
||||
assert '1:06:40' == data['data']['records'][2]['value']
|
||||
|
||||
@ -626,35 +648,35 @@ class TestGetRecords:
|
||||
== data['data']['records'][3]['activity_date']
|
||||
) # noqa
|
||||
assert 'test' == data['data']['records'][3]['user']
|
||||
assert 1 == data['data']['records'][3]['sport_id']
|
||||
assert 5 == data['data']['records'][3]['activity_id']
|
||||
assert sport_1_cycling.id == data['data']['records'][3]['sport_id']
|
||||
assert activity_5_uuid == data['data']['records'][3]['activity_id']
|
||||
assert 'MS' == data['data']['records'][3]['record_type']
|
||||
assert 7.0 == data['data']['records'][3]['value']
|
||||
|
||||
# delete all activities - no more records
|
||||
client.delete(
|
||||
'/api/activities/1',
|
||||
f'/api/activities/{activity_1_uuid}',
|
||||
headers=dict(
|
||||
Authorization='Bearer '
|
||||
+ json.loads(resp_login.data.decode())['auth_token']
|
||||
),
|
||||
)
|
||||
client.delete(
|
||||
'/api/activities/3',
|
||||
f'/api/activities/{activity_3_uuid}',
|
||||
headers=dict(
|
||||
Authorization='Bearer '
|
||||
+ json.loads(resp_login.data.decode())['auth_token']
|
||||
),
|
||||
)
|
||||
client.delete(
|
||||
'/api/activities/4',
|
||||
f'/api/activities/{activity_4_uuid}',
|
||||
headers=dict(
|
||||
Authorization='Bearer '
|
||||
+ json.loads(resp_login.data.decode())['auth_token']
|
||||
),
|
||||
)
|
||||
client.delete(
|
||||
'/api/activities/5',
|
||||
f'/api/activities/{activity_5_uuid}',
|
||||
headers=dict(
|
||||
Authorization='Bearer '
|
||||
+ json.loads(resp_login.data.decode())['auth_token']
|
||||
@ -682,7 +704,7 @@ class TestGetRecords:
|
||||
data=json.dumps(dict(email='test@test.com', password='12345678')),
|
||||
content_type='application/json',
|
||||
)
|
||||
client.post(
|
||||
response = client.post(
|
||||
'/api/activities/no_gpx',
|
||||
content_type='application/json',
|
||||
data=json.dumps(
|
||||
@ -699,7 +721,9 @@ class TestGetRecords:
|
||||
+ json.loads(resp_login.data.decode())['auth_token']
|
||||
),
|
||||
)
|
||||
client.post(
|
||||
data = json.loads(response.data.decode())
|
||||
activity_1_uuid = data['data']['activities'][0]['id']
|
||||
response = client.post(
|
||||
'/api/activities/no_gpx',
|
||||
content_type='application/json',
|
||||
data=json.dumps(
|
||||
@ -716,6 +740,8 @@ class TestGetRecords:
|
||||
+ json.loads(resp_login.data.decode())['auth_token']
|
||||
),
|
||||
)
|
||||
data = json.loads(response.data.decode())
|
||||
activity_2_uuid = data['data']['activities'][0]['id']
|
||||
client.post(
|
||||
'/api/activities/no_gpx',
|
||||
content_type='application/json',
|
||||
@ -733,7 +759,7 @@ class TestGetRecords:
|
||||
+ json.loads(resp_login.data.decode())['auth_token']
|
||||
),
|
||||
)
|
||||
client.post(
|
||||
response = client.post(
|
||||
'/api/activities/no_gpx',
|
||||
content_type='application/json',
|
||||
data=json.dumps(
|
||||
@ -750,6 +776,8 @@ class TestGetRecords:
|
||||
+ json.loads(resp_login.data.decode())['auth_token']
|
||||
),
|
||||
)
|
||||
data = json.loads(response.data.decode())
|
||||
activity_4_uuid = data['data']['activities'][0]['id']
|
||||
response = client.get(
|
||||
'/api/records',
|
||||
headers=dict(
|
||||
@ -768,8 +796,8 @@ class TestGetRecords:
|
||||
== data['data']['records'][0]['activity_date']
|
||||
) # noqa
|
||||
assert 'test' == data['data']['records'][0]['user']
|
||||
assert 1 == data['data']['records'][0]['sport_id']
|
||||
assert 1 == data['data']['records'][0]['activity_id']
|
||||
assert sport_1_cycling.id == data['data']['records'][0]['sport_id']
|
||||
assert activity_1_uuid == data['data']['records'][0]['activity_id']
|
||||
assert 'AS' == data['data']['records'][0]['record_type']
|
||||
assert 7.0 == data['data']['records'][0]['value']
|
||||
|
||||
@ -778,8 +806,8 @@ class TestGetRecords:
|
||||
== data['data']['records'][1]['activity_date']
|
||||
) # noqa
|
||||
assert 'test' == data['data']['records'][1]['user']
|
||||
assert 1 == data['data']['records'][1]['sport_id']
|
||||
assert 1 == data['data']['records'][1]['activity_id']
|
||||
assert sport_1_cycling.id == data['data']['records'][1]['sport_id']
|
||||
assert activity_1_uuid == data['data']['records'][1]['activity_id']
|
||||
assert 'FD' == data['data']['records'][1]['record_type']
|
||||
assert 7.0 == data['data']['records'][1]['value']
|
||||
|
||||
@ -788,8 +816,8 @@ class TestGetRecords:
|
||||
== data['data']['records'][2]['activity_date']
|
||||
) # noqa
|
||||
assert 'test' == data['data']['records'][2]['user']
|
||||
assert 1 == data['data']['records'][2]['sport_id']
|
||||
assert 1 == data['data']['records'][2]['activity_id']
|
||||
assert sport_1_cycling.id == data['data']['records'][2]['sport_id']
|
||||
assert activity_1_uuid == data['data']['records'][2]['activity_id']
|
||||
assert 'LD' == data['data']['records'][2]['record_type']
|
||||
assert '1:00:00' == data['data']['records'][2]['value']
|
||||
|
||||
@ -798,8 +826,8 @@ class TestGetRecords:
|
||||
== data['data']['records'][3]['activity_date']
|
||||
) # noqa
|
||||
assert 'test' == data['data']['records'][3]['user']
|
||||
assert 1 == data['data']['records'][3]['sport_id']
|
||||
assert 1 == data['data']['records'][3]['activity_id']
|
||||
assert sport_1_cycling.id == data['data']['records'][3]['sport_id']
|
||||
assert activity_1_uuid == data['data']['records'][3]['activity_id']
|
||||
assert 'MS' == data['data']['records'][3]['record_type']
|
||||
assert 7.0 == data['data']['records'][3]['value']
|
||||
|
||||
@ -808,8 +836,8 @@ class TestGetRecords:
|
||||
== data['data']['records'][4]['activity_date']
|
||||
) # noqa
|
||||
assert 'test' == data['data']['records'][4]['user']
|
||||
assert 2 == data['data']['records'][4]['sport_id']
|
||||
assert 2 == data['data']['records'][4]['activity_id']
|
||||
assert sport_2_running.id == data['data']['records'][4]['sport_id']
|
||||
assert activity_2_uuid == data['data']['records'][4]['activity_id']
|
||||
assert 'AS' == data['data']['records'][4]['record_type']
|
||||
assert 20.0 == data['data']['records'][4]['value']
|
||||
|
||||
@ -818,8 +846,8 @@ class TestGetRecords:
|
||||
== data['data']['records'][5]['activity_date']
|
||||
) # noqa
|
||||
assert 'test' == data['data']['records'][5]['user']
|
||||
assert 2 == data['data']['records'][5]['sport_id']
|
||||
assert 2 == data['data']['records'][5]['activity_id']
|
||||
assert sport_2_running.id == data['data']['records'][5]['sport_id']
|
||||
assert activity_2_uuid == data['data']['records'][5]['activity_id']
|
||||
assert 'FD' == data['data']['records'][5]['record_type']
|
||||
assert 20.0 == data['data']['records'][5]['value']
|
||||
|
||||
@ -828,8 +856,8 @@ class TestGetRecords:
|
||||
== data['data']['records'][6]['activity_date']
|
||||
) # noqa
|
||||
assert 'test' == data['data']['records'][6]['user']
|
||||
assert 2 == data['data']['records'][6]['sport_id']
|
||||
assert 2 == data['data']['records'][6]['activity_id']
|
||||
assert sport_2_running.id == data['data']['records'][6]['sport_id']
|
||||
assert activity_2_uuid == data['data']['records'][6]['activity_id']
|
||||
assert 'LD' == data['data']['records'][6]['record_type']
|
||||
assert '1:00:00' == data['data']['records'][6]['value']
|
||||
|
||||
@ -838,13 +866,13 @@ class TestGetRecords:
|
||||
== data['data']['records'][7]['activity_date']
|
||||
) # noqa
|
||||
assert 'test' == data['data']['records'][7]['user']
|
||||
assert 2 == data['data']['records'][7]['sport_id']
|
||||
assert 2 == data['data']['records'][7]['activity_id']
|
||||
assert sport_2_running.id == data['data']['records'][7]['sport_id']
|
||||
assert activity_2_uuid == data['data']['records'][7]['activity_id']
|
||||
assert 'MS' == data['data']['records'][7]['record_type']
|
||||
assert 20.0 == data['data']['records'][7]['value']
|
||||
|
||||
client.patch(
|
||||
'/api/activities/2',
|
||||
f'/api/activities/{activity_2_uuid}',
|
||||
content_type='application/json',
|
||||
data=json.dumps(dict(sport_id=1)),
|
||||
headers=dict(
|
||||
@ -870,8 +898,8 @@ class TestGetRecords:
|
||||
== data['data']['records'][0]['activity_date']
|
||||
) # noqa
|
||||
assert 'test' == data['data']['records'][0]['user']
|
||||
assert 1 == data['data']['records'][0]['sport_id']
|
||||
assert 2 == data['data']['records'][0]['activity_id']
|
||||
assert sport_1_cycling.id == data['data']['records'][0]['sport_id']
|
||||
assert activity_2_uuid == data['data']['records'][0]['activity_id']
|
||||
assert 'AS' == data['data']['records'][0]['record_type']
|
||||
assert 20.0 == data['data']['records'][0]['value']
|
||||
|
||||
@ -880,8 +908,8 @@ class TestGetRecords:
|
||||
== data['data']['records'][1]['activity_date']
|
||||
) # noqa
|
||||
assert 'test' == data['data']['records'][1]['user']
|
||||
assert 1 == data['data']['records'][1]['sport_id']
|
||||
assert 2 == data['data']['records'][1]['activity_id']
|
||||
assert sport_1_cycling.id == data['data']['records'][1]['sport_id']
|
||||
assert activity_2_uuid == data['data']['records'][1]['activity_id']
|
||||
assert 'FD' == data['data']['records'][1]['record_type']
|
||||
assert 20.0 == data['data']['records'][1]['value']
|
||||
|
||||
@ -890,8 +918,8 @@ class TestGetRecords:
|
||||
== data['data']['records'][2]['activity_date']
|
||||
) # noqa
|
||||
assert 'test' == data['data']['records'][2]['user']
|
||||
assert 1 == data['data']['records'][2]['sport_id']
|
||||
assert 1 == data['data']['records'][2]['activity_id']
|
||||
assert sport_1_cycling.id == data['data']['records'][2]['sport_id']
|
||||
assert activity_1_uuid == data['data']['records'][2]['activity_id']
|
||||
assert 'LD' == data['data']['records'][2]['record_type']
|
||||
assert '1:00:00' == data['data']['records'][2]['value']
|
||||
|
||||
@ -900,8 +928,8 @@ class TestGetRecords:
|
||||
== data['data']['records'][3]['activity_date']
|
||||
) # noqa
|
||||
assert 'test' == data['data']['records'][3]['user']
|
||||
assert 1 == data['data']['records'][3]['sport_id']
|
||||
assert 2 == data['data']['records'][3]['activity_id']
|
||||
assert sport_1_cycling.id == data['data']['records'][3]['sport_id']
|
||||
assert activity_2_uuid == data['data']['records'][3]['activity_id']
|
||||
assert 'MS' == data['data']['records'][3]['record_type']
|
||||
assert 20.0 == data['data']['records'][3]['value']
|
||||
|
||||
@ -910,8 +938,8 @@ class TestGetRecords:
|
||||
== data['data']['records'][4]['activity_date']
|
||||
) # noqa
|
||||
assert 'test' == data['data']['records'][4]['user']
|
||||
assert 2 == data['data']['records'][4]['sport_id']
|
||||
assert 4 == data['data']['records'][4]['activity_id']
|
||||
assert sport_2_running.id == data['data']['records'][4]['sport_id']
|
||||
assert activity_4_uuid == data['data']['records'][4]['activity_id']
|
||||
assert 'AS' == data['data']['records'][4]['record_type']
|
||||
assert 12.0 == data['data']['records'][4]['value']
|
||||
|
||||
@ -920,8 +948,8 @@ class TestGetRecords:
|
||||
== data['data']['records'][5]['activity_date']
|
||||
) # noqa
|
||||
assert 'test' == data['data']['records'][5]['user']
|
||||
assert 2 == data['data']['records'][5]['sport_id']
|
||||
assert 4 == data['data']['records'][5]['activity_id']
|
||||
assert sport_2_running.id == data['data']['records'][5]['sport_id']
|
||||
assert activity_4_uuid == data['data']['records'][5]['activity_id']
|
||||
assert 'FD' == data['data']['records'][5]['record_type']
|
||||
assert 10.0 == data['data']['records'][5]['value']
|
||||
|
||||
@ -930,8 +958,8 @@ class TestGetRecords:
|
||||
== data['data']['records'][6]['activity_date']
|
||||
) # noqa
|
||||
assert 'test' == data['data']['records'][6]['user']
|
||||
assert 2 == data['data']['records'][6]['sport_id']
|
||||
assert 4 == data['data']['records'][6]['activity_id']
|
||||
assert sport_2_running.id == data['data']['records'][6]['sport_id']
|
||||
assert activity_4_uuid == data['data']['records'][6]['activity_id']
|
||||
assert 'LD' == data['data']['records'][6]['record_type']
|
||||
assert '0:50:00' == data['data']['records'][6]['value']
|
||||
|
||||
@ -940,7 +968,7 @@ class TestGetRecords:
|
||||
== data['data']['records'][7]['activity_date']
|
||||
) # noqa
|
||||
assert 'test' == data['data']['records'][7]['user']
|
||||
assert 2 == data['data']['records'][7]['sport_id']
|
||||
assert 4 == data['data']['records'][7]['activity_id']
|
||||
assert sport_2_running.id == data['data']['records'][7]['sport_id']
|
||||
assert activity_4_uuid == data['data']['records'][7]['activity_id']
|
||||
assert 'MS' == data['data']['records'][7]['record_type']
|
||||
assert 12.0 == data['data']['records'][7]['value']
|
||||
|
33
fittrackee/tests/activities/utils.py
Normal file
33
fittrackee/tests/activities/utils.py
Normal file
@ -0,0 +1,33 @@
|
||||
import json
|
||||
from io import BytesIO
|
||||
from uuid import UUID
|
||||
|
||||
|
||||
def is_valid_uuid(string):
|
||||
try:
|
||||
UUID(string, version=4)
|
||||
except ValueError:
|
||||
return False
|
||||
return True
|
||||
|
||||
|
||||
def post_an_activity(app, gpx_file):
|
||||
client = app.test_client()
|
||||
resp_login = client.post(
|
||||
'/api/auth/login',
|
||||
data=json.dumps(dict(email='test@test.com', password='12345678')),
|
||||
content_type='application/json',
|
||||
)
|
||||
token = json.loads(resp_login.data.decode())['auth_token']
|
||||
response = client.post(
|
||||
'/api/activities',
|
||||
data=dict(
|
||||
file=(BytesIO(str.encode(gpx_file)), 'example.gpx'),
|
||||
data='{"sport_id": 1}',
|
||||
),
|
||||
headers=dict(
|
||||
content_type='multipart/form-data', Authorization=f'Bearer {token}'
|
||||
),
|
||||
)
|
||||
data = json.loads(response.data.decode())
|
||||
return token, data['data']['activities'][0]['id']
|
@ -196,8 +196,12 @@ def activity_cycling_user_1():
|
||||
|
||||
|
||||
@pytest.fixture()
|
||||
def activity_cycling_user_1_segment():
|
||||
activity_segment = ActivitySegment(activity_id=1, segment_id=0)
|
||||
def activity_cycling_user_1_segment(activity_cycling_user_1):
|
||||
activity_segment = ActivitySegment(
|
||||
activity_id=activity_cycling_user_1.id,
|
||||
activity_uuid=activity_cycling_user_1.uuid,
|
||||
segment_id=0,
|
||||
)
|
||||
activity_segment.duration = datetime.timedelta(seconds=6000)
|
||||
activity_segment.moving = activity_segment.duration
|
||||
activity_segment.distance = 5
|
||||
|
Loading…
Reference in New Issue
Block a user