Skip to content

Commit edf0449

Browse files
StevyMarlinocybersoldattech
authored andcommitted
fix: (LAR-21) resolve sharing article into twitter (#208)
1 parent 94b9b48 commit edf0449

File tree

6 files changed

+77
-24
lines changed

6 files changed

+77
-24
lines changed

.env.example

+5
Original file line numberDiff line numberDiff line change
@@ -76,3 +76,8 @@ SENTRY_LARAVEL_DSN=
7676
SENTRY_TRACES_SAMPLE_RATE=
7777

7878
NOTCHPAY_PUBLIC_KEY=
79+
80+
TWITTER_CONSUMER_KEY=your-consumer-key
81+
TWITTER_CONSUMER_SECRET=your-consumer-secret
82+
TWITTER_ACCESS_TOKEN=your-accesss_token
83+
TWITTER_ACCESS_SECRET=your-access-token-secret

app/Console/Commands/PostArticleToTwitter.php

+5-7
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,10 @@ final class PostArticleToTwitter extends Command
1717

1818
public function handle(AnonymousNotifiable $notifiable): void
1919
{
20-
if (app()->environment('production')) {
21-
if ($article = Article::nextForSharing()) {
22-
$notifiable->notify(new PostArticleToTwitterNotification($article));
23-
24-
$article->markAsShared();
25-
}
20+
if ($article = Article::nextForSharing()) {
21+
$notifiable->notify(new PostArticleToTwitterNotification($article));
22+
23+
$article->markAsShared();
2624
}
2725
}
28-
}
26+
}

composer.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
"guzzlehttp/guzzle": "^7.7.0",
2222
"jenssegers/agent": "^2.6.4",
2323
"laravel-notification-channels/telegram": "^4.0",
24-
"laravel-notification-channels/twitter": "^8.0",
24+
"laravel-notification-channels/twitter": "^8.1",
2525
"laravel/framework": "^10.0",
2626
"laravel/sanctum": "^3.2.5",
2727
"laravel/slack-notification-channel": "^2.5",

composer.lock

+14-14
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

config/services.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,8 @@
4444
'client_id' => env('TWITTER_CLIENT_ID'),
4545
'client_secret' => env('TWITTER_CLIENT_SECRET'),
4646
'redirect' => env('TWITTER_REDIRECT'),
47-
'consumer_key' => env('TWITTER_CLIENT_ID'),
48-
'consumer_secret' => env('TWITTER_CLIENT_SECRET'),
47+
'consumer_key' => env('TWITTER_CONSUMER_KEY'),
48+
'consumer_secret' => env('TWITTER_CONSUMER_SECRET'),
4949
'access_token' => env('TWITTER_ACCESS_TOKEN'),
5050
'access_secret' => env('TWITTER_ACCESS_SECRET'),
5151
'scopes' => [],
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
use App\Models\Article;
6+
use Spatie\TestTime\TestTime;
7+
use Illuminate\Support\Facades\Notification;
8+
use App\Console\Commands\PostArticleToTwitter;
9+
10+
beforeEach(fn () =>
11+
Notification::fake(),
12+
TestTime::freeze('Y-m-d H:i:s', '2021-05-01 00:00:01')
13+
);
14+
15+
describe(PostArticleToTwitter::class, function() {
16+
it('shares one article on Twitter every 4 hours when the artisan command runs', function (): void {
17+
Article::factory()->createMany([
18+
['submitted_at' => now()],
19+
['submitted_at' => now(), 'approved_at' => now(), 'published_at' => now()],
20+
['submitted_at' => now(), 'approved_at' => now(), 'published_at' => now()->addHours(1)],
21+
['submitted_at' => now(), 'declined_at' => now()],
22+
]);
23+
24+
$this->assertDatabaseCount('articles', 4);
25+
26+
$this->artisan(PostArticleToTwitter::class)->assertExitCode(0);
27+
Notification::assertCount(1);
28+
29+
TestTime::addHours(4);
30+
$this->artisan(PostArticleToTwitter::class)->assertExitCode(0);
31+
Notification::assertCount(2);
32+
33+
TestTime::addHours(4);
34+
$this->artisan(PostArticleToTwitter::class)->assertExitCode(0);
35+
Notification::assertCount(2);
36+
});
37+
38+
it('will not send article when there are not articles to share', function (): void {
39+
Article::factory()->createMany([
40+
['submitted_at' => now(),'approved_at' => now(),'shared_at' => now()],
41+
['submitted_at' => now(),'approved_at' => now(),'shared_at' => now()],
42+
]);
43+
44+
$this->assertDatabaseCount('articles', 2);
45+
$this->artisan(PostArticleToTwitter::class)->assertExitCode(0);
46+
47+
Notification::assertNothingSent();
48+
Notification::assertCount(0);
49+
});
50+
});

0 commit comments

Comments
 (0)